zoukankan      html  css  js  c++  java
  • GCD 中Group的使用

    使用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添加任务
     
     
  • 相关阅读:
    VisualStudio 2012中的单元测试
    基于.Net 写我自己的Ajax后台框架AjaxFramework
    MongoDB的真正性能实战百万用户
    基于MMSeg算法的中文分词类库
    Visual Studio 2012的新插件Code Digger (类似Pex)
    Visual Studio 2010 单元测试之一普通单元测试
    Django系列教程:一、Django的安装和入门
    Cocos2dx 入门调研总结
    教程:建立自己的私有云
    如何让你的作业在Hadoop集群中真正实现分布式运行
  • 原文地址:https://www.cnblogs.com/zh-li/p/5140142.html
Copyright © 2011-2022 走看看