iOS学习笔记-118.多线程17——NSOperationQueue队列的取消、暂停、恢复
来源:互联网 发布:豆瓣fm for mac打不开 编辑:程序博客网 时间:2024/06/05 08:19
- 多线程17NSOperationQueue队列的取消暂停恢复
- 一队列的取消暂停恢复
- 1 暂停和恢复队列
- 2 取消队列的所有操作
- 3 取消和暂停必须是一个操作执行完了才起作用
- 二代码示例
- 三运行结果
- 一队列的取消暂停恢复
多线程17——NSOperationQueue队列的取消、暂停、恢复
一、队列的取消、暂停、恢复
1.1 暂停和恢复队列
//暂停和恢复队列- (void)setSuspended:(BOOL)b; // YES代表暂停队列,NO代表恢复队列- (BOOL)isSuspended;
1.2 取消队列的所有操作
取消队列的所有操作,不可以恢复
- (void)cancelAllOperations;
==提示:也可以调用 NSOperation 的 - (void)cancel
方法取消单个操作==
1.3 取消和暂停必须是一个操作执行完了才起作用
取消和暂停必须是一个操作执行完了才起作用。比如说,我们执行5个操作,现在正在执行第2个操作,我们现在取消或者暂停是不会立即起作用的,直到操作2执行完了,才会起到作用。
二、代码示例
- (IBAction)startClick:(id)sender { if(_queue==nil){ _queue = [[NSOperationQueue alloc]init]; _queue.maxConcurrentOperationCount = 1; } [self test1];}- (IBAction)suspendClick:(id)sender { //暂停,是可以恢复 /* 队列中的任务也是有状态的:已经执行完毕的 | 正在执行 | 排队等待状态 */ //不能暂停当前正在处于执行状态的任务 [self.queue setSuspended:YES];}- (IBAction)goOnClick:(id)sender { //继续执行 [self.queue setSuspended:NO];}- (IBAction)cancelClick:(id)sender { //取消,不可以恢复 //该方法内部调用了所有操作的cancel方法 [self.queue cancelAllOperations];}-(void)test1{ NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{ for (NSInteger i = 0; i<1000; i++) { NSLog(@"1-%zd---%@",i,[NSThread currentThread]); } }]; NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{ for (NSInteger i = 0; i<1000; i++) { NSLog(@"2-%zd---%@",i,[NSThread currentThread]); } }]; NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{ for (NSInteger i = 0; i<1000; i++) { NSLog(@"3-%zd---%@",i,[NSThread currentThread]); } }]; [self.queue addOperation:op1]; [self.queue addOperation:op2]; [self.queue addOperation:op3];}
三、运行结果
我们开始运行操作1的时候点击了暂停,它直到操作1执行完了才会暂停
[24039:119419] 1-0---<NSThread: 0x608000267c80>{number = 3, name = (null)}[24039:119419] 1-1---<NSThread: 0x608000267c80>{number = 3, name = (null)}[24039:119419] 1-2---<NSThread: 0x608000267c80>{number = 3, name = (null)}.....[24039:119419] 1-997---<NSThread: 0x608000267c80>{number = 3, name = (null)}[24039:119419] 1-998---<NSThread: 0x608000267c80>{number = 3, name = (null)}[24039:119419] 1-999---<NSThread: 0x608000267c80>{number = 3, name = (null)}
阅读全文
0 0
- iOS学习笔记-118.多线程17——NSOperationQueue队列的取消、暂停、恢复
- iOS学习笔记-119.多线程18——NSOperationQueue自定义NSOperation执行一个操作的取消
- iOS 多线程编程<十、NSOperationQueue最大并发量、暂停、取消>
- iOS学习笔记-114.多线程13——NSOperationQueue和NSInvocationOperation合用实现多线程
- iOS学习笔记-115.多线程14——NSOperationQueue和NSBlockOperation合用实现多线程
- iOS学习笔记-116.多线程15——NSOperationQueue和自定义NSOperation合用实现多线程
- iOS学习笔记-117.多线程16——NSOperationQueue最大并发数
- iOS学习笔记15—Cocoa:NSOperation和NSOperationQueue
- iOS多线程——NSOperation & NSOperationQueue
- 多线程学习笔记3-NSOperationQueue
- ios学习路线—iOS高级(NSOperationQueue)
- 多线程——NSOperationQueue
- 关于NSOperationQueue多线程的学习
- NSOperationQueue(多线程请求队列)
- Android学习笔记5 Activity的暂停和恢复
- iOS多线程开发——NSOperation/NSOperationQueue浅析
- C++多线程编程经验——线程暂停、恢复
- iOS多线程总结(3)——NSOperation与NSOperationQueue的使用
- [JS] 七种加密解密方法
- Java中如何封装自己的类,建立并使用自己的类库?
- Java基础知识清单
- 清除浮动的几种方法,各自的优缺点
- 使用js实现楼层跳跃
- iOS学习笔记-118.多线程17——NSOperationQueue队列的取消、暂停、恢复
- 线程池原理解析
- 计算机设计思想 —— 解耦(分离)与内聚
- 微信小程序之兼容问题
- python:1:数字类型相关函数
- 三个Java多线程循环顺序周期打印1-75个数
- websocket
- 分享下学习Kotlin的历程-开始写逻辑吧 if/for/while/when
- 各种传感器知识