2015笔记——GCD(三)
2018-07-27 本文已影响7人
满庭花醉三千客
假设某个Dispatch Queue中有若干个block,当queue在执行时,我不想让block执行了,先暂停一会,该怎么办呢?
哈,dispatch queue可以被挂起和恢复。使用 dispatch_suspend 函数来挂起,使用 dispatch_resume 函数来恢复。
一个需要注意的地方时:dispatch queue 的挂起是block粒度的。换句话说,挂起一个queue并不会将当前执行的block挂起。它会允许当前执行的block执行完毕,然后后续的block不再会被执行,直至queue被恢复。如果你挂起了一个queue,那么销毁它之前,必须先对其进行恢复。
那么接下来,展示一下我的实验及其结果:
首先:

定义一个全局变量queue(请注意使用strong),以及一个全局BOOL值。
然后写个按钮,用来控制挂起queue,并向myQueue中添加两个执行的block:

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

最最关键的还是效果啦:

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