GCD(dispatch_group)

来源:互联网 发布:走路赚钱的软件 编辑:程序博客网 时间:2024/04/29 10:59
    //多个任务都结束后 的一个全部结束的处理
    //创建监听组
    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 监听函数 会堵塞当前线程(该函数一直调用,等待到设定的时间之后才会返回)
     
   
0 0
原创粉丝点击