GCD中dispatch_suspend/dispatch_resume使用方法

在GCD中dispatch_suspend和dispatch_resume提供了“掛起、恢復(fù)”隊(duì)列的功能,簡(jiǎn)單來(lái)說(shuō),就是可以暫停、恢復(fù)隊(duì)列上的任務(wù)。但是這里的“掛起”,并不能保證可以立即停止隊(duì)列上正在運(yùn)行的block,未執(zhí)行的block會(huì)被“掛起”。

dispatch_suspend(queue) //暫停某個(gè)隊(duì)列  dispatch_suspend掛起指定的dispatch_queue
dispatch_resume(queue)  //恢復(fù)某個(gè)隊(duì)列  dispatch_resume恢復(fù)指定的dispatch_queue
/*
dispatch_suspend會(huì)掛起dispatch queue,但并不意味著當(dāng)前正在執(zhí)行的任務(wù)會(huì)停下來(lái),這只會(huì)導(dǎo)致不再繼續(xù)執(zhí)行還未執(zhí)行的任務(wù)。
dispatch_resume會(huì)喚醒已掛起的dispatch queue。你必須確保它們成對(duì)調(diào)用。
*/

代碼執(zhí)行

    dispatch_queue_t queue = dispatch_queue_create("com.test.gcd", DISPATCH_QUEUE_SERIAL);
    //提交第一個(gè)block,延時(shí)5秒打印。
    dispatch_async(queue, ^{
        [NSThread sleepForTimeInterval:5];
        NSLog(@"五秒后打印,隊(duì)列掛起時(shí)已經(jīng)開(kāi)始執(zhí)行,");
    });
    //提交第二個(gè)block,也是延時(shí)5秒打印
    dispatch_async(queue, ^{
        [NSThread sleepForTimeInterval:5];
        NSLog(@"隊(duì)列掛起時(shí)未執(zhí)行,需恢復(fù)隊(duì)列后在執(zhí)行");
    });
    //延時(shí)一秒
    NSLog(@"立刻打印~~~~~~~");
    [NSThread sleepForTimeInterval:1];
    //掛起隊(duì)列
    NSLog(@"一秒后打印,隊(duì)列掛起");
    dispatch_suspend(queue);
    //延時(shí)10秒
    [NSThread sleepForTimeInterval:10];
    NSLog(@"十秒后打印,開(kāi)啟隊(duì)列");
    //恢復(fù)隊(duì)列
    dispatch_resume(queue);
打印結(jié)果:
2017-05-04 16:22:57.279 Practice_Animation[2234:1740974] 立刻打印~~~~~~~
2017-05-04 16:22:58.281 Practice_Animation[2234:1740974] 一秒后打印,隊(duì)列掛起
2017-05-04 16:23:02.284 Practice_Animation[2234:1742180] 五秒后打印,隊(duì)列掛起時(shí)已經(jīng)開(kāi)始執(zhí)行,
2017-05-04 16:23:08.283 Practice_Animation[2234:1740974] 十秒后打印,開(kāi)啟隊(duì)列
2017-05-04 16:23:13.288 Practice_Animation[2234:1742717] 隊(duì)列掛起時(shí)未執(zhí)行,需恢復(fù)隊(duì)列后在執(zhí)行
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在iOS應(yīng)用程序中,如果不做特殊的操作,程序的代碼都是跑在主線程中的。在主線程中有一個(gè)RunLoop, iOS會(huì)在...
    勿與龍比閱讀 826評(píng)論 0 9
  • 程序中同步和異步是什么意思?有什么區(qū)別? 解釋一:異步調(diào)用是通過(guò)使用單獨(dú)的線程執(zhí)行的。原始線程啟動(dòng)異步調(diào)用,異步調(diào)...
    風(fēng)繼續(xù)吹0閱讀 1,114評(píng)論 1 2
  • 一. 重點(diǎn): 1.dispatch_queue_create(生成Dispatch Queue) 2.Main D...
    BestJoker閱讀 1,685評(píng)論 2 2
  • 一、多線程簡(jiǎn)介: 所謂多線程是指一個(gè) 進(jìn)程 -- process(可以理解為系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序)中可以開(kāi)...
    尋形覓影閱讀 1,184評(píng)論 0 6
  • 今天吹完蠟燭,兒子問(wèn)我媽媽你許了什么愿望。我笑著回答:平安,合家幸福。很多時(shí)候是當(dāng)自我感覺(jué)良好了才會(huì)興致勃勃的總結(jié)...
    莫里夫人0505閱讀 218評(píng)論 0 0

友情鏈接更多精彩內(nèi)容