zoukankan      html  css  js  c++  java
  • dispatch_group_async 使用详解

    dispatch_group_async可以实现监听一组任务是否完成,完成后得到通知执行其他的操作。这个方法很有用,比如你执行三个下载任务,当三个任务都下载完成后你才通知界面说完成的了。下面是一段例子代码:

    1. [cpp]
    2. dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
    3. dispatch_group_t group = dispatch_group_create(); 
    4. dispatch_group_async(group, queue, ^{ 
    5. [NSThread sleepForTimeInterval:1]; 
    6. NSLog(@"group1"); 
    7. }); 
    8. dispatch_group_async(group, queue, ^{ 
    9. [NSThread sleepForTimeInterval:2]; 
    10. NSLog(@"group2"); 
    11. }); 
    12. dispatch_group_async(group, queue, ^{ 
    13. [NSThread sleepForTimeInterval:3]; 
    14. NSLog(@"group3"); 
    15. }); 
    16. dispatch_group_notify(group, dispatch_get_main_queue(), ^{ 
    17. NSLog(@"updateUi"); 
    18. }); 
    19. dispatch_release(group); 
    20. dispatch_group_async是异步的方法,运行后可以看到打印结果:
    21. 2012-09-25 16:04:16.737 **Test[43328:11303] group1
    22. 2012-09-25 16:04:17.738 **Test[43328:12a1b] group2
    23. 2012-09-25 16:04:18.738 **Test[43328:13003] group3
    24. 2012-09-25 16:04:18.739 **Test[43328:f803] updateUi
    复制代码

    每个一秒打印一个,当第三个任务执行后,upadteUi被打印。3、dispatch_barrier_async的使用

    dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行


    例子代码如下:

    1. [cpp] 
    2. dispatch_queue_t queue = dispatch_queue_create("**test.rongfzh.yc", DISPATCH_QUEUE_CONCURRENT); 
    3. dispatch_async(queue, ^{ 
    4. [NSThread sleepForTimeInterval:2]; 
    5. NSLog(@"dispatch_async1"); 
    6. }); 
    7. dispatch_async(queue, ^{ 
    8. [NSThread sleepForTimeInterval:4]; 
    9. NSLog(@"dispatch_async2"); 
    10. }); 
    11. dispatch_barrier_async(queue, ^{ 
    12. NSLog(@"dispatch_barrier_async"); 
    13. [NSThread sleepForTimeInterval:4]; 
    14. }); 
    15. dispatch_async(queue, ^{ 
    16. [NSThread sleepForTimeInterval:1]; 
    17. NSLog(@"dispatch_async3"); 
    18. });
    复制代码

    打印结果:

    2012-09-25 16:20:33.967 **Test[45547:11203] dispatch_async1
    2012-09-25 16:20:35.967 **Test[45547:11303] dispatch_async2
    2012-09-25 16:20:35.967 **Test[45547:11303] dispatch_barrier_async
    2012-09-25 16:20:40.970 **Test[45547:11303] dispatch_async3
    请注意执行的时间,可以看到执行的顺序如上所述。


    4、dispatch_apply
    执行某个代码片段N次。

    1. dispatch_apply(5, globalQ, ^(size_t index) {
    2. // 执行5次
    3. });
    复制代码


    原文链接:http://www.2cto.com/kf/201209/157722.html

    点击返回按钮以后,取消gcd子线程

    dispatch_suspend(downloadNewsQueue);
    dispatch_release(downloadNewsQueue);
    downloadNewsQueue=nil;

    注意:gcd在使用时,也要判断一下downloadNewsQueue是否为nil

    参考:http://www.cocoachina.com/bbs/simple/?t129464.html

  • 相关阅读:
    OCP-1Z0-053-V13.02-498题
    Oracle索引扫描算法
    dojo CsvStore简介
    Oracle预估的基数算法
    HTML多表头表格
    hql查询实例
    PGA突破pga_aggregate_target限制
    OCP-1Z0-053-V13.02-330题
    java 发送字节流图片,c++接收二进制流
    windows 7蓝屏解决办法
  • 原文地址:https://www.cnblogs.com/ygm900/p/3696371.html
Copyright © 2011-2022 走看看