首页 > 代码库 > dispatch group使用方法详解
dispatch group使用方法详解
第一、dispatch group可以用来将多个block组成一组以监测这些Block全部完成或者等待全部完成时发出的消息。使用函数dispatch_group_create来创建,然后使用函数dispatch_group_async来将block提交至一个dispatch queue,同时将它们添加至一个组。使用dispatch_group_notify,增加监听,当group内的block全部执行完时,再执行该函数指定的block
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, ^{
[NSThread sleepForTimeInterval:4];
NSLog(@"blk0");});
dispatch_group_async(group, queue, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"blk1");});
dispatch_group_async(group, queue, ^{
[NSThread sleepForTimeInterval:3];
NSLog(@"blk2");});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{NSLog(@"done");});
2015-01-30 17:18:00.845 testApp[1870:60b] HELLO
2015-01-30 17:18:02.847 testApp[1870:3607] blk1
2015-01-30 17:18:03.848 testApp[1870:3807] blk2
2015-01-30 17:18:04.846 testApp[1870:1903] blk0
2015-01-30 17:18:04.849 testApp[1870:60b] done
第二、dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
等待group关联的block执行完毕,也可以设置超时参数,如果dispatch_group_wait函数的返回值不为零,说明group内处理为结束,否则为零
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, ^{
[NSThread sleepForTimeInterval:4];
NSLog(@"blk0");});
dispatch_group_async(group, queue, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"blk1");});
dispatch_group_async(group, queue, ^{
[NSThread sleepForTimeInterval:3];
NSLog(@"blk2");});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{NSLog(@"done");});
int result=dispatch_group_wait(group, dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC));
if (result==0) {
NSLog(@"the group has finished");
}else{
NSLog(@"the group is processing");
}
NSLog(@"hello");
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, ^{
[NSThread sleepForTimeInterval:4];
NSLog(@"blk0");});
dispatch_group_async(group, queue, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"blk1");});
dispatch_group_async(group, queue, ^{
[NSThread sleepForTimeInterval:3];
NSLog(@"blk2");});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{NSLog(@"done");});
NSLog(@"HELLO");
2015-01-30 17:18:00.845 testApp[1870:60b] HELLO
2015-01-30 17:18:02.847 testApp[1870:3607] blk1
2015-01-30 17:18:03.848 testApp[1870:3807] blk2
2015-01-30 17:18:04.846 testApp[1870:1903] blk0
2015-01-30 17:18:04.849 testApp[1870:60b] done
第二、dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
等待group关联的block执行完毕,也可以设置超时参数,如果dispatch_group_wait函数的返回值不为零,说明group内处理为结束,否则为零
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, ^{
[NSThread sleepForTimeInterval:4];
NSLog(@"blk0");});
dispatch_group_async(group, queue, ^{
[NSThread sleepForTimeInterval:2];
NSLog(@"blk1");});
dispatch_group_async(group, queue, ^{
[NSThread sleepForTimeInterval:3];
NSLog(@"blk2");});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{NSLog(@"done");});
int result=dispatch_group_wait(group, dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC));
if (result==0) {
NSLog(@"the group has finished");
}else{
NSLog(@"the group is processing");
}
NSLog(@"hello");
dispatch group使用方法详解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。