GCD(dispatch_group)
2015-04-03 22:11
155 查看
//多个任务都结束后 的一个全部结束的处理
//创建监听组
dispatch_group_t group=dispatch_group_create();
//创建并行队列
dispatch_queue_t queue=dispatch_get_global_queue(0, 0);
//使用 group 监听 队列任务的执行
dispatch_group_async(group, queue, ^{
//执行操作
NSLog(@"task01");
});
dispatch_group_async(group, queue, ^{
//执行操作
NSLog(@"task02");
});
dispatch_group_async(group, queue, ^{
//执行操作
NSLog(@"task03");
});
dispatch_group_async(group, queue, ^{
//执行操作
//休眠6秒
sleep(6);
NSLog(@"task04");
});
//(1) 监视函数 dispatch_group_notify
//队列操作执行结束
dispatch_group_notify(group, queue, ^{
//执行操作
NSLog(@"done");
});
//(2)监视函数 dispatch_group_wait
// 等待 time 时间后 对队列进行监听
dispatch_time_t time=dispatch_time(DISPATCH_TIME_NOW, 5ull *NSEC_PER_SEC);
long result=dispatch_group_wait(group, time);
if (result ==0)
{
NSLog(@"finish");
}else
{
NSLog(@"not finish");
}
//主线程休眠2秒
sleep(2);
NSLog(@"main task");
// 最终打印
/*
13:08:32.501 GCD高级用法.03[1970:86112] task02
13:08:32.501 GCD高级用法.03[1970:86113] task03
13:08:32.501 GCD高级用法.03[1970:86111] task01
13:08:37.501 GCD高级用法.03[1970:86078] not finish
13:08:38.502 GCD高级用法.03[1970:86114] task04
13:08:38.502 GCD高级用法.03[1970:86114] done
13:08:39.502 GCD高级用法.03[1970:86078] main task
task01-03并行任务 随机打印
5秒之后分线程并没有完全执行结束 not finish
task04 -> sleep(6)
最终才执行 主线程的 main task
结论:dispatch_group_wait 监听函数 会堵塞当前线程(该函数一直调用,等待到设定的时间之后才会返回)
//创建监听组
dispatch_group_t group=dispatch_group_create();
//创建并行队列
dispatch_queue_t queue=dispatch_get_global_queue(0, 0);
//使用 group 监听 队列任务的执行
dispatch_group_async(group, queue, ^{
//执行操作
NSLog(@"task01");
});
dispatch_group_async(group, queue, ^{
//执行操作
NSLog(@"task02");
});
dispatch_group_async(group, queue, ^{
//执行操作
NSLog(@"task03");
});
dispatch_group_async(group, queue, ^{
//执行操作
//休眠6秒
sleep(6);
NSLog(@"task04");
});
//(1) 监视函数 dispatch_group_notify
//队列操作执行结束
dispatch_group_notify(group, queue, ^{
//执行操作
NSLog(@"done");
});
//(2)监视函数 dispatch_group_wait
// 等待 time 时间后 对队列进行监听
dispatch_time_t time=dispatch_time(DISPATCH_TIME_NOW, 5ull *NSEC_PER_SEC);
long result=dispatch_group_wait(group, time);
if (result ==0)
{
NSLog(@"finish");
}else
{
NSLog(@"not finish");
}
//主线程休眠2秒
sleep(2);
NSLog(@"main task");
// 最终打印
/*
13:08:32.501 GCD高级用法.03[1970:86112] task02
13:08:32.501 GCD高级用法.03[1970:86113] task03
13:08:32.501 GCD高级用法.03[1970:86111] task01
13:08:37.501 GCD高级用法.03[1970:86078] not finish
13:08:38.502 GCD高级用法.03[1970:86114] task04
13:08:38.502 GCD高级用法.03[1970:86114] done
13:08:39.502 GCD高级用法.03[1970:86078] main task
task01-03并行任务 随机打印
5秒之后分线程并没有完全执行结束 not finish
task04 -> sleep(6)
最终才执行 主线程的 main task
结论:dispatch_group_wait 监听函数 会堵塞当前线程(该函数一直调用,等待到设定的时间之后才会返回)
相关文章推荐
- GCD 第三篇 dispatch_group
- iOS学习笔记74- 完整详解GCD系列(三)dispatch_group
- iOS系统GCD学习(3):dispatch_group
- GCD学习笔记(六):Dispatch Group
- 完整详解GCD系列(三)dispatch_group
- iOS GCD之dispatch_group的使用(多个文件并发上传)
- iOS开发:深入理解GCD 第二篇(dispatch_group、dispatch_barrier、基于线程安全的多读单写)
- iOS系统GCD学习(4):dispatch_group2
- GCD使用dispatch_group_notify、dispatch_group_enter、dispatch_group_leave处理多线程同步操作
- iOS系统GCD学习(3):dispatch_group
- GCD(三) ---- dispatch_group 调度群组
- iOS GCD中的dispatch_group
- GCD之串行队列和并行队列及dispatch_group
- iOS多线程GCD深入之Dispatch Group使用
- 完整详解GCD系列(三)dispatch_group
- GCD(四)dispatch_group
- GCD 学习(四) dispatch_group
- GCD入门介绍四---- dispatch_group_async和dispatch_barrier_async
- iOS开发:深入理解GCD 第二篇(dispatch_group、dispatch_barrier、基于线程安全的多读单写)
- 完整详解swift GCD系列(三)dispatch_group