iOS GCD(5)

来源:未知 责任编辑:责任编辑 发表时间:2014-01-26 21:59 点击:

   
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"done");
    });

因为向 Global Dispatch Queue即Concurrent Dispatch Queue追加处理任务,多个线程并行执行,所以追加处理任务的执行顺序是不定的,执行时顺序会发生变化,但是主线程中执行结果输出done肯定是最后的。

   

下面稍微解释一下上面的那段代码,上面由3个输出任务的block组成一个dispatch group,并把这个dispatch group添加到dispatch queue中执行,当dispatch group中的

block任务执行完毕后,dispatch_group_notify方法就会被执行到,所以它的第一个参数是group,表示其被监视。在追加到dispatch group中的全部执行处理任务执行结束后,

将第三个参数中的block任务添加到第二个参数的dispatch queue中执行,注意此时dispatch group中的所以执行任务已经执行结束了。

 


另外,在dispatch group中也可以使用 dispatch_group_wait方法仅等待全部处理执行结束。

[cpp]
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); 
    dispatch_group_t group = dispatch_group_create(); 
     
    dispatch_group_async(group, queue, ^{NSLog(@"blk1");}); 
    dispatch_group_async(group, queue, ^{NSLog(@"blk2");}); 
    dispatch_group_async(group, queue, ^{NSLog(@"blk3");}); 
     
    dispatch_group_wait(group, DISPATCH_TIME_FOREVER); 

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
    dispatch_group_t group = dispatch_group_create();
   
    dispatch_group_async(group, queue, ^{NSLog(@"blk1");});
    dispatch_group_async(group, queue, ^{NSLog(@"blk2");});
    dispatch_group_async(group, queue, ^{NSLog(@"blk3");});
   
    dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

在这个方法中的第二个参数指定等待时间,这里使用DISPATCH_TIME_FOREVER意味着永久等待,只要属于dispatch group中的处理尚未执行结束,就会一直等待,中途不能取消。

 

 

当然如同dispatch——after方法中那样,也可以指定等待时间为1秒等等。

[cpp]
//这里指定等待时间1s,即1s后查看dispatch group中的处理是否全部执行结束  
    dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, 1ull*NSEC_PER_SEC); 
    long result = dispatch_group_wait(group, time); 
    if (result == 0) { 
        //属于dispatch group中的全部处理都执行结束  
    } 
    else { 
        //属于dispatch group的某一个处理还在执行  

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Lexical or Preprocessor Issue 'xxx.h
  • ios学习笔记(二)xcode 4.3.2下实现基本交互
  • ios版本的helloworld
  • iphone(object-c) 内存管理(3) 有效的内存管理 前半部分
  • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
  • UITableView一些方法
  • IOS类似iphone通讯录TableView的完整demo【附源码】
  • [iPhone中级]iPhone团购信息客户端的开发 (二)
  • iphone(object-c)内存管理(1)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1