美文网首页
iOS GCD dispatch_suspend/dispatc

iOS GCD dispatch_suspend/dispatc

作者: CrystalZhu | 来源:发表于2020-02-18 09:45 被阅读0次

在GCD中dispatch_suspend和dispatch_resume提供了“挂起、恢复”队列的功能,简单来说,就是可以暂停、恢复队列上的任务。但是这里的“挂起”,并不能保证可以立即停止队列上正在运行的block,未执行的block会被“挂起”。

dispatch_suspend(queue) //暂停某个队列  dispatch_suspend挂起指定的dispatch_queue
dispatch_resume(queue)  //恢复某个队列  dispatch_resume恢复指定的dispatch_queue
/*
dispatch_suspend会挂起dispatch queue,但并不意味着当前正在执行的任务会停下来,这只会导致不再继续执行还未执行的任务。
dispatch_resume会唤醒已挂起的dispatch queue。你必须确保它们成对调用。
*/

代码执行

    dispatch_queue_t queue = dispatch_queue_create("com.test.gcd", DISPATCH_QUEUE_SERIAL);
    //提交第一个block,延时5秒打印。
    dispatch_async(queue, ^{
        [NSThread sleepForTimeInterval:5];
        NSLog(@"五秒后打印,队列挂起时已经开始执行,");
    });
    //提交第二个block,也是延时5秒打印
    dispatch_async(queue, ^{
        [NSThread sleepForTimeInterval:5];
        NSLog(@"队列挂起时未执行,需恢复队列后在执行");
    });
    //延时一秒
    NSLog(@"立刻打印~~~~~~~");
    [NSThread sleepForTimeInterval:1];
    //挂起队列
    NSLog(@"一秒后打印,队列挂起");
    dispatch_suspend(queue);
    //延时10秒
    [NSThread sleepForTimeInterval:10];
    NSLog(@"十秒后打印,开启队列");
    //恢复队列
    dispatch_resume(queue);

输出:
立刻打印~~~~~~~ -> 一秒后打印,队列挂起 -> 五秒后打印,队列挂起时已经开始执行 -> 十秒后打印,开启队列 -> 队列挂起时未执行,需恢复队列后在执行

相关文章

网友评论

      本文标题:iOS GCD dispatch_suspend/dispatc

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