GCD高级用法(二) dispatch_group

Dispatch Group机制——笔记 《Effective Objective-C 2.0  编写高质量iOS与OS X代码的52个有效方法》(第四十四条:通过Dispatch Group机制,根据系统资源状况来执行任务)笔记 要点如下: 1、dispatch group是GCD的一项特性,可以把任务分组。这组任务完成后时,调用者会收到通知 据此,可将要并发执行的多个任务合并为一组,这样调用者就可以知道这些任务何时能全部执行完... 阅读详情
     dispatch_group_t
   
    //多个任务都结束后 的一个全部结束的处理
    
    //创建监听组
    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 监听函数 会堵塞当前线程(该函数一直调用,等待到设定的时间之后才会返回)
     
     */
GCD之dispatch_group_create dispatch_group_create是建一个组// 创建一个组 dispatch_group_t group = dispatch_group_create();常见用法:异步执行两个网络请求,等这两个请求数据完毕后,再刷新主线程 dispatch_group_t group = dispatch_group_create(); // 创建并行队列 dispatch_q 阅读详情

相关推荐

SAP ABAP MIGO增强实战:自定义页签与字段的完整实现指南

本文详细介绍了SAP ABAP中MIGO增强的实战指南,包括自定义页签与字段的完整实现步骤。通过BADI增强技术,开发者可以快速满足企业个性化需求,如添加供应商批次号等特殊字段。文章涵盖数据存储结构设计、BADI框架实现、核心方法编写及数据持久化方案,帮助用户高效完成MIGO屏幕增强开发。

study的专栏 774

iOS底层探索之多线程(十一)—GCD源码分析(调度组)

回顾 在上篇博客已经对GCD的信号量做了一个介绍和举例应用,还有对底层源码的分析,那么本篇博客 看苹果工程师,如何巧妙封装调度组,看完底层源码直呼好家伙,真是妙啊!!! 1. 调度组 1.1 调度组介绍 调度组最直接的作用就是控制任务的执行顺序 dispatch_group_create :创建调度组组 dispatch_group_async:进组的任务 执行 dispatch_group_notify :进组任务执行完毕的通知 dispatch_group_wait: 进组任务执行等待时间 dis

俊而不逊的博客 1024

ODrive0.5.5源码分析(1) ADC的处理

odrive 0.5.5 ADC

danger的博客 4307

dispatch_group实践,AFN3.0多个网络请求

在实际开发过程中经常会有在一个页面有多个网络请求,页面UI需要在所有网络请求全部回来的情况下更新。先简单看一个具体的问题: 页面有三个网络请求a、b、c。三个网络请求都成功的情况下刷新UI,有一个失败就认为请求失败,不进行UI刷新。

fool宋的专栏 2467

VINS-Mono 代码详细解读——IMU预积分的残差、Jacobian和协方差 processIMU()+intergrationBase类+imu_factor.h

IMU离散中值预积分 1.1、IMU模型 测量值:加速度计a^、陀螺仪w^, 加上了bias游走和随机白噪声。 真实值:加速度计a、陀螺仪w。 实际情况下,可以获得测量值a^和w^,需要反推真实值。一般忽略随机游走高斯噪声n w=w^-bg; a=qwb(a^-ba)-gw; 1.2、连续时间IMU运动模型,积分 PVQ(两帧之间) 将第k帧和第k+1帧所有的IMU进行积...

try_again_later的博客 9266

新手避坑指南:在MacBook上为PyTorch正确配置MPS环境,跑通第一个YOLOv8训练

本文详细指导新手如何在MacBook上为PyTorch正确配置MPS环境,并成功运行YOLOv8训练。从环境准备、PyTorch安装到YOLOv8配置和性能调优,提供全面的避坑指南和实用技巧,帮助开发者充分利用Mac的GPU加速能力。

weixin_29100399的博客 228

dispatch_group_wait

- (void)test {     dispatch_queue_t aDQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);     dispatch_group_t group = dispatch_group_create();     // Add a task to the grou

明明 6213

从CLIP到AnomalyCLIP:零样本异常检测的跨领域进化之路

本文探讨了从CLIP到AnomalyCLIP的技术演进,重点介绍了零样本异常检测在跨领域应用中的突破。AnomalyCLIP通过对象无关提示学习和多尺度特征提取,显著提升了工业质检、医疗影像等领域的检测精度,实现了高达96.4%的金属螺母划痕检测精度和85.7%的皮肤癌敏感度。这一技术为多模态模型在异常检测中的应用开辟了新路径。

r2s3t4的博客 111

完整详解GCD系列(三)dispatch_group

完整详解GCD系列三,详细的阐述了dispatch_group的常用方法,通过实例解析如何使用。并且实例解析了dispatch_group_enter/dispatch_group_leave。提供了三个完整的实例代码

Leo的专栏 9758

408王道考研【数据结构】思维导图(章节详细可下载xmind文件)

由于图片太多,不一一放上来了,还有部分章节【查找、排序、B树B+树等】在百度网盘,可以关注我的公众号领取【完整的图片+xmind文件】,如想要获取xmind文件的同学可以关注我的个人公众号“小柒很爱喵”,回复“数据结构导图”,可获得以上导图原图和xmind文件(可修改导图内容、查看导图隐藏的笔记与备注,即上图带杠杠的地方是我进一步助于理解的解释)。 希望对你们...

weixin_41950078的博客 7989

【S32K3 MCAL配置】-3.4-CANFD配置-接收特定的“经典CAN/CANFD标准帧”和“经典CAN/CANFD扩展帧”(基于MCAL+FreeRTOS)

【S32K3 MCAL配置】-3.4-CANFD配置-接收特定的“经典CAN/CANFD标准帧”和“经典CAN/CANFD扩展帧”(基于MCAL+FreeRTOS)

「汽车电子助手」的博客 696

SpringBoot整合Shiro权限框架实战:从认证授权到常见问题排查

权限控制是后台系统的核心需求,Shiro作为轻量级安全框架,通过Subject、SecurityManager、Realm三大核心概念实现认证与授权。其原理是将用户身份验证和权限校验从业务代码中剥离,通过过滤器链和注解方式统一管理。技术价值在于降低权限模块与业务逻辑的耦合度,提升系统安全性和可维护性。典型应用场景包括后台管理系统、企业内部数据看板等需要登录校验和角色权限控制的Web应用。SpringBoot整合Shiro可快速实现URL级别和注解级别的权限控制,同时需关注版本兼容、Session管理、权限缓

weixin_34221775的博客 350

微信8.0所有URL Scheme大全:隐藏入口与使用场景详解 内附195条微信URL Scheme

URL Scheme 类似于一个协议地址,它的作用和网页的https://差不多,只不过它不是打开网页,而是直接跳转到微信App内部的功能页面。→ 打开微信扫一扫→ 打开零钱通详情→ 打开微信面对面支付微信功能的“快捷指令”。整理下来,微信的 URL Scheme 基本覆盖了支付、联系人、扫一扫、小程序、运动设备等多个入口。对开发者来说,这些 Scheme 就像是隐藏的快捷通道,在某些场景(比如支付唤起、活动红包、客服入口)能大大简化流程。微信对外部调用限制非常严格。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2189

GCD源码吐血分析(2)——dispatch_async/dispatch_sync/dispatch_once/dispatch group

上一章中,我们知道了获取GCD queue的底层实现。获取到queue后,就需要将任务提交到queue中进行处理。 我们有两种方式提交任务: dispatch_async和dispatch_sync。一个是异步不等待任务完成就返回,另一个是同步任务,需要等待任务完成。这两种提交任务的方式有所不同: dispatch_async :底层运用了线程池,会在和当前线程不同的线程上处理任务。 di...

无忘无往 8152

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

GCD中的dispatch_group函数的详解

1、引入dispatch_group函数的目的在追加到dispatch_Queue中的多个处理全部结束后想要执行结束的处理,这种需求经常会在我们的程序中出现。(第一种情况)只使用一个Serial Dispatch Queue时,只要将想要执行的操作全部追加到串行队列,并在最后执行结束的操作即可实现(第二种情况)当我们使用Concurrent Dispatch Queue时或者使用多个Dispatch

Benson的学习笔记 3932

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

iOS GCD(二) dispatch_group 队列组

有时候我们会有这样的需求:分别异步执行2个耗时任务,然后当2个耗时任务都执行完毕后再回到主线程执行任务。这时候我们可以用到 GCD 的队列组。 使用场景: 同时上传多个图片,所有图片上传完成之后去请求服务器上传图片地址。 dispatch_group_notify 原理:使用函数dispatch_group_create创建dispatch group,然后使用函数dispatch_group_a...

春风酿酒的博客 1279

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

GCD编程简介dispatch_group_async

OS Develop相关技巧 Leave a reply   一、用 GCD 将任务分组 GCD让我们创建组,这些组允许你把任务放到一个位置,然后全部运行,运行结束后 Tags: dispatch_async, dispatch_group_t, GCD 会从 GCD 收到一个通知。这一点有很多有价值的用途。例如,假设你有一个

leewolf 1484

GCD 高级特性解析:dispatch_group、dispatch_semaphore 与 barrier 的巧妙运用

Grand Central Dispatch(GCD)作为 Apple 开发的多核并发技术,为开发者提供了强大的任务调度能力。本文将深入解析 GCD 中三个高级特性——dispatch_group、dispatch_semaphore 和 barrier,帮助你掌握这些工具的使用技巧,轻松应对复杂的并发场景。 ## dispatch_group:任务协同的终极方案 dispatch_group

gitblog_01049的博客 869

深入理解GCD之dispatch_group

原文链接深入理解GCD之dispatch_group 之前已经介绍了dispatch_semaphore的底层实现,dispatch_group的实现是基于前者的。在看源码之前,我们先看一下我们是如何应用的。假设有这么场景:有一个A耗时操作,B和C两个网络请求和一个耗时操作C当ABC都执行完成后,刷新页面。我们可以用dispatch_group实现。关键如下: - (void)viewDidLoa...

weixin_34292287的博客 332

GCD API——Dispatch Queue与Dispatch Group

本文讲述了Grand Central Dispatch中Dispatch Queue与Dispatch Group相关API。GCD全称Grand Central Dispatch,是异步执行任务的技术之一。开发者只需要定义想执行的任务并追加到适当的Dispatch Queue(调度队列)中,GCD就能生成必要的线程成并执行任务。

502BadGateway 1540

GCD(三) dispatch_group

本文是GCD多线程编程中dispatch_group内容的小结,通过本文,你可以了解到: 如何使用dispatch_group来实现在一系列并发任务完成后做一些收尾工作的需求 我们在平常的开发中,经常会遇到这样这样的一个需求,当应用程序启动时,需要从服务器获取各种配置信息,然后再去做首页UI的初始化与后面的逻辑处理。对于这个需求,我们肯定是希望可以调用一个方法来执行这些任务,并在所有网络请求完...

weixin_34206899的博客 330

iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用

介绍:Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统。这建立在任务并行执行的线程池模式的基础上的。它首次发布在Mac OS X 10.6 ,iOS 4及以上也可用。设计:GCD的工作原理是:让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务。一个任务可以是一个函数(f

空杯子 15万+

GCD系列:调度组(dispatch_group)

Dispatch_group GCD头文件group.h中谈到,可以将一组block提交到调度组(dispatch_group)中,执行逐个串行回调,下面来看看相关函数。 函数申明与理解 dispatch_group_t dispatch_group_create(void); //创建一个调度组,释放调度组使用dispatch_release()函数,创建成功返回一个dispatc...

anpengji9081的博客 331

max group by 所有列_深入浅出 GCD 之 dispatch_group

作者 | 陈爱彬来源 | 小专栏,关注作者小专栏阅读更多好文章概述dispatch_group可以将GCD的任务合并到一个组里来管理,也可以同时监听组里所有任务的执行情况。主要的API有以下几个,先看一下Dispatch Group的具体使用。dispatch_group_createdispatch_group_enterdispatch_group_leavedispatch_gr...

weixin_35688434的博客 188

dispatch_group_async

dispatch_group_async

m0_47450499的博客 3017

【iOS】GCD学习

GCD是iOS开发中非常重要的一个内容,在此作一个总结。GCD全称Grand Central Dispatch,是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码在系统及中实现。开发者只需要定义想执行的任务并追加到适当的调度队列中,GCD就能生成必要的线程并计划执行任务。由于线程管理是作为系统的一部分来实现的,因此可以统一管理,也可执行任务,这样会比以前的线程更有效率。仅一行代码就能表示让处理在后台线程中执行。那么为什么使用GCD?

2401_87841908的博客 1123
上一篇: GCD高级用法(一):dispatch_after
下一篇: GCD高级用法(三) 多线程单例
韩小城
博客等级 码龄12年 37粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值