NSOperationQueue

本文介绍如何使用NSOperationQueue实现线程池管理,包括设置最大并发数、任务优先级、任务依赖等特性,确保任务按需并行或串行执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-(IBAction)operationQueue:(id)sender{
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
queue.maxConcurrentOperationCount = 10;//最多添加10个线程。NSOperationQueueDefaultMaxConcurrentOperationCount 默认值
//queue.suspended = YES;//暂停队列
//queue.suspended = YES;//重新开始队列
//[queue cancelAllOperations];//取消队列“cancelAllOperations”并没有做太多的工作,他只是对队列中的每一个操作调用“cancel”方法 — 这并没有起很大作用!:] 如果一个操作并没有开始,然后你对它调用“cancel”方法,操作会被取消,并从队列中移除。然而,如果一个操作已经在执行了,这就要由单独的操作去识别撤销(通过检查isCancelled属性)然后停止它所做的工作。

queue.name = @"测试队列";
int index = 1;
MyTask *task = [[MyTask alloc]init];
task.operationId = index++;
//[task cancel];//当任务启动的时候,需要具体的进程来取消
[task setQueuePriority:NSOperationQueuePriorityHigh];//优先级
[queue addOperation:task];

/// 还可以继续添加任务

/*
 task = [[MyTask alloc]init];
 task.operationId = index++;
[queue addOperation:task];

//两个操作提交的时间间隔很近,线程池中的线程,谁先启动是不定的
*/

/// 按照顺序执行
task = [[MyTask alloc]init];
task.operationId = index++;
if([[queue operations]count]>0){
    MyTask *task2 = [[queue operations]lastObject];
    [task addDependency:task2];//添加依赖
    //[task removeDependency:task2];//移除依赖
}
[queue addOperation:task];

// blockqueue
[queue addOperationWithBlock:^{
    [NSThread sleepForTimeInterval:3];
    [[NSOperationQueue mainQueue]addOperationWithBlock:^{
        DLog(@"回到主线程完成任务");
    }];
}];

}

pragma mark - NSOperationQueueViewController

  • (IBAction)NSOperationQueueViewController:(id)sender{
    OperationViewController * vc = [[OperationViewController alloc]init];
    [self.navigationController pushViewController:vc animated:YES];
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值