GCD高级用法(二) dispatch_group
2015-03-25 13:23
381 查看
dispatch_group_t
//多个任务都结束后 的一个全部结束的处理
//创建监听组
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 after
- GCD高级用法-Dispatch I/O
- GCD高级用法(一):dispatch_after
- Grand Central Dispatch (GCD) 用法详细介绍
- GCD-dispatch_group
- GCD之串行队列和并行队列及dispatch_group
- GCD 学习(四) dispatch_group
- iOS开发之GCD(6)API Dispatch Group
- GCD 学习(四) dispatch_group
- iOS GCD 之dispatch_group方面的开发
- GCD入门介绍四---- dispatch_group_async和dispatch_barrier_async
- GCD编程简介dispatch_group_async
- 深入ObjC GCD中的dispatch group工作原理。
- 完整详解GCD系列(三)dispatch_group
- GCD收录3--dispatch_group线程调度组
- GCD 信号量控制并发(dispatch_semaphore)以及dispatch_group_async
- iOS 线程之GCD的高级用法
- iOS系统GCD学习(3):dispatch_group
- GCD高级用法:分派源与信号量 7个 Demo
- GCD dispatch_group