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添加任务

时间: 2024-08-25 00:50:45

GCD 中Group的使用的相关文章

GCD中一些API的使用

GCD中一些API的使用 1.串行队列和并行队列 iOS中线程分为串行队列和并行队列,串行队列指的是任务按照先后顺序,依次执行:并行队列指的是任务不按照加入的先后顺序,并发的执行. iOS中串行队列通过如下方式进行创建 dispatch_queue_t queue = dispatch_queue_create("cn.bourbonz.www", DISPATCH_QUEUE_SERIAL); 需要注意的是,引号中的内容表示的是对该队列的描述,后面的参数代表的是串行队列. 并行队列通

SQL中Group By的使用

SQL中Group By的使用 1.概述 “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理. 2.原始表 3.简单Group By 示例1 select 类别, sum(数量) as 数量之和 from A group by 类别 返回结果如下表,实际上就是分类汇总. 4.Group By 和 Order By 示例2 select 类别, sum(数量) AS 数量之和 fr

mysql中group by和order by混用 结果不是理想结果

在使用mysql排序的时候会想到按照降序分组来获得一组数据,而使用order by往往得到的不是理想中的结果,那么怎么才能使用group by 和order by得到理想中的数据结果呢? 例如 有一个 帖子的回复表,posts( id , tid , subject , message ,  dateline ) , id为 自动增长字段, tid为该回复的主题帖子的id(外键关联),  subject 为回复标题, message 为回复内容, dateline 为回复时间,用UNIX 时间戳

GCD中如何延迟处理任务

在实际的开发中,经常会遇到想要在指定的时间间隔后执行某个处理 <一>在GCD中提供了dispatch_after函数来完成这一操作 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ <#code to be executed after a specified delay#>

java中list集合的内容,如何使用像数据库中group by形式那样排序

java中list集合的内容,如何使用像数据库中group by形式那样排序,比如:有一个 List<JavaBean> 他中包含了一些如下的内容JavaBean:name    money(名称)  (金额) 来源A   100来源B   200来源C   300来源B   6600来源A   99800<数据1> 最后想实现的是:如果假设这些数据在数据库中,那么通过 select name,sum(money) from Table group by name 该语句得到的Li

GCD中的队列与任务

一.简介: Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法.它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统.它是一个在线程池模式的基础上执行的并行任务.在Mac OS X 10.6雪豹中首次推出,也可在IOS 4及以上版本使用. GCD是一个替代诸如NSThread等技术的很高效和强大的技术.GCD完全可以处理诸如数据锁定和资源泄漏等复杂的异步编程问题.GCD的工作原理是让一个程序,根据可用的处理资源,安排他们在任何可用的处理

关于GCD中的队列

队列分为串行队列,并发队列,全局队列和主队列: 串行队列:一次只能安排一个任务. dispatch_queue_t q = dispatch_queue_create("itcast",DISPATCH_QUEUE_SERIA); DISPATCH_QUEUE_SERIAL==NULL: 并发队列:一次可安排多个任务. dispatch_queue_t q = dispatch_queue_create("itcast", DISPATCH_QUEUE_CONCUR

GCD中使用dispatch_after函数延迟处理任务

在实际的开发中,经常会遇到想要在指定的时间间隔后执行某个处理 <一>在GCD中提供了dispatch_after函数来完成这一操作 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ <#code to be executed after a specified delay#>

浅析mongodb中group分组

这篇文章主要介绍了浅析mongodb中group分组的实现方法及示例,非常的简单实用,有需要的小伙伴可以参考下. group做的聚合有些复杂.先选定分组所依据的键,此后MongoDB就会将集合依据选定键值的不同分成若干组.然后可以通过聚合每一组内的文档,产生一个结果文档.和数据库一样group常常用于统计.MongoDB的group还有很多限制,如:返回结果集不能超过16M, group操作不会处理超过10000个唯一键,好像还不能利用索引[不很确定]. 一.Group大约需要一下几个参数. 1