您的位置:首页 > 其它

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 监听函数 会堵塞当前线程(该函数一直调用,等待到设定的时间之后才会返回)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: