码迷,mamicode.com
首页 > 编程语言 > 详细

[OC] 线程 dispatch_group_t

时间:2018-11-07 11:31:49      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:log   nslog   --   create   sleep   ber   syn   queue   模拟   

- (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

标签:log   nslog   --   create   sleep   ber   syn   queue   模拟   

原文地址:https://www.cnblogs.com/OranBlog/p/9920543.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!