美文网首页
GCD队列group.h__group

GCD队列group.h__group

作者: 悟2023 | 来源:发表于2018-01-17 11:44 被阅读11次

group.h相关方法

group.h

方法介绍


/**
 创建组
 */
dispatch_group_t
dispatch_group_create(void);

/**
组内部异步线程

 @param group  组 
 @param queue  队列
 @param block 任务
 */
void
dispatch_group_async(dispatch_group_t group,
    dispatch_queue_t queue,
    dispatch_block_t block);
/*
组内部异步线程

 @param group 组
 @param queue  队列
 @param context 数据指针
 @param work C函数方法名
 */
void
dispatch_group_async_f(dispatch_group_t group,
    dispatch_queue_t queue,
    void *_Nullable context,
    dispatch_function_t work);

/*
等待组任务完成

 @param group 指定被等待的组
 @param timeout  等待的时长
 */
long
dispatch_group_wait(dispatch_group_t group, dispatch_time_t timeout);

/*
组队列中任务完成通知

 @param group 监听的组
 @param queue  监听的队列
 @param block 任务完成回调
 */
void
dispatch_group_notify(dispatch_group_t group,
    dispatch_queue_t queue,
    dispatch_block_t block);

/*
组队列中任务完成通知

 @param group 监听的组
 @param queue  监听的队列
 @param context 任务数据指针
 @param work C函数方法名
 */
void
dispatch_group_notify_f(dispatch_group_t group,
    dispatch_queue_t queue,
    void *_Nullable context,
    dispatch_function_t work);

/*
加入任务组

 @param group 任务组
 */
void
dispatch_group_enter(dispatch_group_t group);

/*
离开任务组

 @param group 任务组
 */
void
dispatch_group_leave(dispatch_group_t group);

举例说明:

dispatch_queue_t quene = dispatch_queue_create("com.Maker", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(quene, ^{
    dispatch_queue_t allTasksQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_group_t allTasksGroup = dispatch_group_create();
    dispatch_group_async(allTasksGroup, allTasksQueue, ^{
        NSLog(@"任务_1-----%d",[NSThread isMainThread]);
    });
    dispatch_group_async(allTasksGroup, allTasksQueue, ^{
        NSLog(@"任务_2-----%d",[NSThread isMainThread]);
    });
    dispatch_group_async(allTasksGroup, allTasksQueue, ^{
        NSLog(@"任务_3-----%d",[NSThread isMainThread]);
    });
    NSLog(@"--------------------");
    dispatch_time_t time = dispatch_time(DISPATCH_TIME_FOREVER, 10 * NSEC_PER_SEC);
    if (dispatch_group_wait(allTasksGroup, time) == 0) {
        NSLog(@"任务已经全部执行完毕-----%d",[NSThread isMainThread]);
    }
    else {
        NSLog(@"任务没有执行完毕-----%d",[NSThread isMainThread]);
    }
    /*
    dispatch_group_notify(allTasksGroup, allTasksQueue, ^{
        NSLog(@"任务已经全部执行完毕-----%d",[NSThread isMainThread]);
    });
    */
});

相关文章

  • GCD队列group.h__group

    group.h相关方法 方法介绍 举例说明:

  • GCD队列、同步异步

    GCD队列、同步异步 GCD队列、同步异步

  • GCD的学习笔记(One)

    并行和并发 GCD简介 GCD的任务 GCD的队列 GCD创建队列或获取队列的方法 任务的执行方式:同步执行(同步...

  • 2021--- GCD

    gcd同步,异步,串行队列,并发队列,全局队列,主队列,以及死锁。 1、gcd队列阻塞问题[https://www...

  • iOS多线程--GCD篇

    GCD 文章目录GCD简介任务和队列GCD的使用步骤队列的创建方法任务的创建方法GCD的基本使用并行队列 + 同步...

  • GCD串行并发队列

    学习完本篇,您会对以下知识点更加理解: 队列 串行队列 并发队列 GCD全局队列 GCD主队列 创建串行队列 创建...

  • GCD相关知识总结

    一:GCD的队列简介 GCD的Queue有三大队列类型:主队列(main)、全局队列(global)、用户队列(c...

  • 7.多线程基础(七)GCD加强

    1.GCD串行队列和并发队列 2.GCD延时执行 3.GCD线程组:(的作用) 4.GCD定时器: GCD的实现 ...

  • 关于多线程GCD 串行/并行、同步/异步

    一、GCD串行/并行队列创建 串行队列: 并行队列: 二、GCD串行/并行队列同步/异步执行 执行内容1: 执行结...

  • iOS多线程--彻底学会多线程之『GCD』

    GCD 文章目录 GCD简介 任务和队列 GCD的使用步骤 队列的创建方法 任务的创建方法 GCD的基本使用 并行...

网友评论

      本文标题:GCD队列group.h__group

      本文链接:https://www.haomeiwen.com/subject/xtrfoxtx.html