我们可以使用dispatch_suspend函数暂停一个queue以阻止它执行block对象;使用dispatch_resume函数继续dispatch queue。调用dispatch_suspend会增加queue的引用计数,调用dispatch_resume则减少queue的引用计数。当引用计数大于0时,queue就保持挂起状态。因此你必须对应地调用suspend和resume函数。挂起和继续是异步的,而且只在执行block之间(比如在执行一个新的block之前或之后)生效。挂起一个queue不会导致正在执行的block停止。

下面看代码:

 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);

运行结果:

如果把线程挂起恢复取消之后:

  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先输出。

转载于:https://www.cnblogs.com/5ishare/p/4380337.html

GCD之线程挂起与恢复相关推荐

  1. Java并发编程(3):线程挂起、恢复与终止的正确方法(含代码)

    挂起和恢复线程 Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的.如果在不合适的时候挂起线程(比如,锁定共享资源时),此时 ...

  2. RT-Thread物联网操作系统介绍:6、线程挂起和恢复

    //恢复线程函数 rt_thread_resume(LED_Thread); //挂起任务函数 uwRet = rt_thread_suspend(LED_Thread); 工程代码百度网盘链接网址在 ...

  3. (58)模拟线程切换——添加挂起、恢复线程功能

    一.回顾 我们在上一篇博客分析了模拟线程切换的源码. <模拟线程切换> 我们着重分析了 Scheduling 和 SwitchContext 这两个函数,对线程切换的过程有了新的认识: 线 ...

  4. 树莓派cpu检测_【树莓派3B+测评】线程的挂起与恢复CPU温度检测

    [树莓派3B+测评]线程的挂起与恢复&CPU温度检测 [复制链接] 本帖最后由 donatello1996 于 2018-12-22 17:33 编辑 在TCP通信中,除了线程的创建和删除以外 ...

  5. Java线程的挂起与恢复 wait(), notify()方法介绍

    一, 什么是线程的挂起与恢复 从字面理解也很简单. 所谓线程挂起就是指暂停线程的执行(阻塞状态). 而恢复时就是让暂停的线程得以继续执行.(返回就绪状态) 二, 为何需要挂起和恢复线程. 我们来看1个 ...

  6. java怎么看具体被挂起的线程_Java线程的挂起、恢复和终止

    有时,线程的挂起是很有用的.例如,一个独立的线程可以用来显示当日的时间.如果用户不希望用时钟,线程被挂起.在任何情形下,挂起线程是很简单的,一旦挂起,重新启动线程也是一件简单的事. 挂起,终止和恢复线 ...

  7. linux中线程的挂起与恢复(进程暂停)

    今 天 在网上查了一下 linux中对进程的挂起与恢复的实现,相关资料少的可怜,大部分都是粘贴复制.也没有完整详细的代码.故自己整理了一下 程序流程为:主线程创建子线程(当前子线程状态为stop停止状 ...

  8. RTX5 | 线程管理05 - 线程挂起osThreadSuspend与线程恢复osThreadResume

    文章目录 一.前言 二.API 三.实验目的 四.代码 4.1.main.h 4.2.main.c 五.Event Recorder调试 一.前言 osThreadSuspend可以让线程A挂起,线程 ...

  9. 七. 多线程编程11.线程的挂起、恢复和终止

    有时,线程的挂起是很有用的.例如,一个独立的线程可以用来显示当日的时间.如果用户不希望用时钟,线程被挂起.在任何情形下,挂起线程是很简单的,一旦挂起,重新启动线程也是一件简单的事. 挂起,终止和恢复线 ...

最新文章

  1. Graylog2+mongdb+rsyslog中央日志服务器对syslog的web管理--转载
  2. VS C++生成dll和静态调用dll的方法
  3. 使用mac以来的一些认识
  4. 33. 搜索旋转排序数组(013)二分查找+思路详解+来干了这杯代码!!!!!!
  5. 渗透测试之Nmap命令(三) idle 扫描
  6. java获取语言_如何在java中获取语言环境对象?
  7. 【Spark】Spark kafka because consumer rebalance same group id joined different streaming
  8. 如何高效的学习前端的网页设计?
  9. python函数里面可以修改一些数据类型
  10. java内部类简单解析
  11. lightoj 1029 最小生成树 + 最大生成树
  12. 局域网ip扫描工具_Network Kit X for Mac(网络检测工具箱)
  13. ad09只在一定范围内查找相似对象_AD常用快捷键
  14. 移动流量卡是月底清零吗,什么时候购买次月套餐?
  15. 第七章第八章思维导图
  16. Word中设置不同页面的页眉不一样的方法(页脚、页码同理)
  17. Java Online IDE
  18. 计算机设备标签怎么贴,电脑怎么打印不干胶标签 电脑打印不干胶标签操作流程【图文】...
  19. ElasticSearch自定义分析器(custom analyzer)
  20. p2p 企业信贷 UML 跨行清算

热门文章

  1. 阿里实习 电面,面试
  2. 误区30日谈21-24
  3. 安卓手机充电慢_苹果手机充电慢,耗电却很快?教你几个窍门,充得快电量更耐用...
  4. python自定义模块与模块调用
  5. php生成随机不重复的数字_PHP生成不重复随机数的几种方法
  6. mysql注入原理_Mysql报错注入原理分析
  7. python中文分词工具_结巴中文分词工具的安装使用 Python分词教程
  8. opencv 轮廓放大_基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析...
  9. 求计算机技术在创新上的应用,计算机技术在教学上的应用
  10. java随机打印一个数组元素_java 怎么随机打印自定义数组里面的字符串