[OC] 线程 dispatch_group_t

Posted oranblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[OC] 线程 dispatch_group_t相关的知识,希望对你有一定的参考价值。

- (void)groupEvent{
    //创建线程
    dispatch_group_t group =dispatch_group_create();
    dispatch_queue_t globalQueue=dispatch_get_global_queue(0, 0);
 
    dispatch_group_enter(group);
    
    //模拟多线程耗时操作
    dispatch_group_async(group, globalQueue, ^{
        sleep(3);
        NSLog(@"%@---block1结束。。。",[NSThread currentThread]);
        dispatch_group_leave(group);
    });

    NSLog(@"%@---1NSLOG结束。。。",[NSThread currentThread]);
    
    dispatch_group_enter(group);
    //模拟多线程耗时操作
    dispatch_group_async(group, globalQueue, ^{
        sleep(3);
        NSLog(@"%@---block2结束。。。",[NSThread currentThread]);
        dispatch_group_leave(group);
    });

    NSLog(@"%@---2NSLOG结束。。。",[NSThread currentThread]);
//线程全部结束 dispatch_group_notify(group, dispatch_get_global_queue(
0, 0), ^{ NSLog(@"%@---全部结束。。。",[NSThread currentThread]); }); }

上面的代码的后台输出是:

2016-12-23 09:46:27.853 CPMNetworking[1341:36092] <NSThread: 0x600000068600>{number = 1, name = main}---1NSLOG结束。。。
2016-12-23 09:46:27.856 CPMNetworking[1341:36092] <NSThread: 0x600000068600>{number = 1, name = main}---2NSLOG结束。。。
2016-12-23 09:46:30.923 CPMNetworking[1341:36550] <NSThread: 0x608000263f00>{number = 4, name = (null)}---block1结束。。。
2016-12-23 09:46:30.930 CPMNetworking[1341:36176] <NSThread: 0x6000002647c0>{number = 5, name = (null)}---block2结束。。。
2016-12-23 09:46:30.930 CPMNetworking[1341:36176] <NSThread: 0x6000002647c0>{number = 5, name = (null)}---全部结束。。。

可以发现,因为block内被加了休眠sleep,所以block外的NSLOG操作被先执行了。而在block1被执行完毕后,block2和线程结束的部分的内容才被执行


以上是关于[OC] 线程 dispatch_group_t的主要内容,如果未能解决你的问题,请参考以下文章

黑苹果硬件指南--Intel 10代配置推荐

dispatch_group_t踩过的坑

dispatch_group_t踩过的坑

Install macOS Catalina 10.15.5 19F96 Clover-OC-PE 三引导官方原版镜像.dmg

gcd 多线程结束通知

OC对象的本质