美文网首页2015技术笔记
2015笔记——GCD(三)

2015笔记——GCD(三)

作者: 满庭花醉三千客 | 来源:发表于2018-07-27 09:37 被阅读7次

    假设某个Dispatch Queue中有若干个block,当queue在执行时,我不想让block执行了,先暂停一会,该怎么办呢?

    哈,dispatch queue可以被挂起和恢复。使用 dispatch_suspend 函数来挂起,使用 dispatch_resume 函数来恢复。

    一个需要注意的地方时:dispatch queue 的挂起是block粒度的。换句话说,挂起一个queue并不会将当前执行的block挂起。它会允许当前执行的block执行完毕,然后后续的block不再会被执行,直至queue被恢复。如果你挂起了一个queue,那么销毁它之前,必须先对其进行恢复。

    那么接下来,展示一下我的实验及其结果:

    首先:

    屏幕快照 2015-11-26 14.16.59.png

    定义一个全局变量queue(请注意使用strong),以及一个全局BOOL值。

    然后写个按钮,用来控制挂起queue,并向myQueue中添加两个执行的block:

    屏幕快照 2015-11-26 16.05.49.png

    最后是按钮的点击事件,也就是挂起和恢复queue的方法:

    屏幕快照 2015-11-26 14.28.08.png

    最最关键的还是效果啦:

    屏幕快照 2015-11-26 14.27.30.png

    可以看出:当我点击了按钮,将queue挂起时,第一个block仍然在执行,执行完毕后,第二个block没有再执行了。当我隔了十多秒后再点击按钮,则第二个block又继续执行了。
    加油~

    相关文章

      网友评论

        本文标题:2015笔记——GCD(三)

        本文链接:https://www.haomeiwen.com/subject/lkrwmftx.html