GCD之线程挂起与恢复
来源:互联网 发布:js 数组增加键 编辑:程序博客网 时间:2024/06/05 22:57
我们可以使用dispatch_suspend函数暂停一个queue以阻止它执行block对象;使用dispatch_resume函数继续dispatch queue。调用dispatch_suspend会增加queue的引用计数,调用dispatch_resume则减少queue的引用计数。当引用计数大于0时,queue就保持挂起状态。因此你必须对应地调用suspend和resume函数。挂起和继续是异步的,而且只在执行block之间(比如在执行一个新的block之前或之后)生效。挂起一个queue不会导致正在执行的block停止。
下面看代码:
1
2
3
4
5
6
7
8
9
10
dispatch_queue_t queue=dispatch_queue_create(
"test"
, DISPATCH_QUEUE_CONCURRENT);
dispatch_suspend(queue);
dispatch_async(queue, ^{
dispatch_apply(5, queue, ^(size_t index) {
NSLog
(@
"%ld 1"
,index);
});
});
sleep(1);
NSLog
(@
"aa"
);
dispatch_resume(queue);
运行结果:
如果把线程挂起恢复取消之后:
1
2
3
4
5
6
7
8
9
dispatch_queue_t queue=dispatch_queue_create(
"test"
, DISPATCH_QUEUE_CONCURRENT);
// dispatch_suspend(queue);
dispatch_async(queue, ^{
dispatch_apply(5, queue, ^(size_t index) {
NSLog
(@
"%ld 1"
,index);
});
});
NSLog
(@
"aa"
);
// dispatch_resume(queue);
运行结果如下 :
可以看到:线程挂起时,添加到线程队列中的block并没执行,而且还将主线程休眠了1秒,取消线程挂起后才执行,而在第二个代码段中,没有使用线程挂起,可以看到并不会都是aa先输出。
0 0
- GCD之线程挂起与恢复
- 线程挂起与恢复
- 线程挂起与恢复
- 线程的挂起与恢复
- 线程的挂起与恢复
- 线程的挂起与恢复
- 线程的挂起与恢复
- 线程挂起恢复与终止
- Java多线程之线程的挂起与恢复(Suspend/Resume)
- GCD挂起恢复
- linux线程的挂起与恢复
- C# 线程的挂起与恢复
- [MFC]线程的挂起与恢复
- C# 线程的挂起与恢复
- 线程恢复和挂起
- 挂起和恢复线程
- 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)
- 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)
- Ubuntu 14.04下怎么使用chroot创建另外一个系统
- Coursera ML笔记 -----week8-2 数据降维
- 101097B-思维,vector的resize和assign
- C#往线程里传递参数的方法小结
- 牛客网 有趣的排序
- GCD之线程挂起与恢复
- android 圆形头像 自定义ImageView
- zzuli 2133: 密室逃脱(2017轻工业校赛 )
- Centos7 subversion 搭建
- 慧荣科技亮相2017纽伦堡国际嵌入式应用展览会
- 笔记二--Android的编译
- android.content.res.Resources$NotFoundException: Resource ID #0x0
- 东南大学 崇志宏 转载“目前的对抗学习文献” 其中Triple GAN值得关注!!
- SQL学习笔记