码迷,mamicode.com
首页 > 其他好文 > 详细

GCD 中Group的使用

时间:2016-01-18 18:58:01      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:

使用Group实现:先执行一系列操作(在group中),执行完成后再执行别的操作。
 
 
1.创建group及任务队列(目的是让group中的所有任务执行完再执行别的任务)
   
    dispatch_group_t group = dispatch_group_create(); //创建一个group
   
    dispatch_queue_t globeQ = dispatch_get_global_queue(0, 0); //该方法获取全局队列(每一次得到的都是同一个队列)
   
2.提交任务到group
    dispatch_group_async(group, globeQ, ^{
       
        usleep(2000000);//休眠时间
        NSLog(@"买菜");
        //block中的就是一个任务
       
    });//async异步提交  异步提交:提交每一个任务不会相互影响
   
    dispatch_group_async(group, globeQ, ^{
       
        usleep(2000000);
        NSLog(@"买料");
        //block中的就是一个任务
    });
   
    dispatch_group_async(group, globeQ, ^{
        //block中的就是一个任务
//        usleep(2000000);
        while (1) {
//
//        这样会导致group卡在这个任务中    
        }
       
        NSLog(@"买肉");
    });
 
   
3.提交最终的任务(group中任务完成后,需要执行的任务)
dispatch_queue_t q_1 = dispatch_queue_create("queue1", DISPATCH_QUEUE_SERIAL); //SERIAL串行队列
   
    dispatch_group_notify(group, q_1, ^{ //等到group中的所有任务执行完成,把该任务加入到队列q_1
       
        NSLog(@"做火锅");
        NSLog(@"吃火锅");
       
    });
 
到这里已经实现了先执行一系列操作(在group中),执行完成后再执行别的操作。
以下是GCD中关于group的一些用法:
 
*1.设置超时时间(最大等待时间)
    dispatch_time_t time  = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC));
   
    dispatch_group_wait(group, time);//如果group内任务执行需要大量的时间,可以选择设置最大等待时间
   
    NSLog(@"end end end “); //不管group中任务是否执行完毕,等待指定time时间后,执行这一句。
 
*2.指定time时间后,给队列添加任务
dispatch_time_t time  = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC));
    dispatch_after(time, q_1, ^{ NSLog(@"waited at least three seconds.%@",[NSThread currentThread]); });//指定time时间后,给队列q_1添加任务
 
 

GCD 中Group的使用

标签:

原文地址:http://www.cnblogs.com/zh-li/p/5140142.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!