1.在gcd中,如果想在几个队列的任务执行完之后去做另一件事办法:
如果是Serial Dispatch Queue队列可以使用dispatch_set_target_queue 函数把一个(Serial Dispatch Queue)队列作为几个队列的目标队列,这样在顺序执行完几个队列的任务之后就会执行目标队列的任务。
但是如果想几个并发执行的队列实现此功能需要用到 Dispatch Group函数。具体用法:
dispatch_group_t patch_Group1=dispatch_group_create();
dispatch_queue_t concurrentQueue1= dispatch_queue_create("www.goole.com", DISPATCH_QUEUE_CONCURRENT);
dispatch_queue_t concurrentQueue2= dispatch_queue_create("www.sougou.com", DISPATCH_QUEUE_CONCURRENT);
dispatch_group_async(patch_Group1, concurrentQueue1, ^{
for (int i=0; i<10000; i++) {
NSLog(@"并发队列1执行了%d次",i);
}
});
dispatch_group_async(patch_Group1, concurrentQueue2, ^{
for (int i=0; i<100; i++) {
NSLog(@"并发队列2执行了%d次",i);
}
});
long result= dispatch_group_wait(patch_Group1, dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC*3ull));
if (result==0) {
NSLog(@"队列组中的队列任务已经结束");
}
else{
NSLog(@"队列组中的队列任务进行中...");
}
dispatch_group_notify(patch_Group1, dispatch_get_main_queue(), ^{
NSLog(@"队列组中的队列任务已经结束");
});
dispatch_group_notify()函数可以检测到patch_Group1队列组中所有的任务已经全部执行完毕,从而做处理
dispatch_group_wait(group, time)函数可以检测相应的时间之后队列组的状态,当返回0时表示队列任务已经结束 group表示调度组,time表示时间,该函数是同步函数,在调度组中的队列已经都已经结束或者是时间到了之后会程序才会接着往下运行.