4月11日 GCD 总结(二)
1、 dispatch_after
在一段给定的、以纳秒为单位的时间段之后,将 Block Object 分派到一个分派队列。这
个函数需要的参数有:
Delay in nanoseconds
在执行指定的 Block Object(由第三个参数指定)之前 GCD 必须在一个给定的分派队列 (由第二个参数指定) 上等待的纳秒数。
Dispatch queue
Block Object (由第三个参数指定)在给定的延迟(由第一个参数指定)之后必须执行在其上执行的派送队列。
Block object
在指定的分派队列上等待一定纳秒后 Block Object 会被调用;它没有返回值并且不接受参数
int64_t delayInSeconds = 20.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
//
NSLog(@"oh fuck!");
});
像你看到的那样,对于 dispatch_after 和 dispatch_after_f 函数纳秒级延迟参数必须是类 dispatch_time_t,它是绝对时间的抽象表示形式。要得到这个参数的值,你要用此代码中演示的 dispatch_time 函数。这里是您可以传递给 dispatch_time 函数的参数:
Base time
假设这个值为 B,Delta parameter 值为 D,通过这个函数结束的时间就等于 B+D。您可以设置此参数的值到 DISPATCH_TIME_NOW 来把现在作为基时间,然后从现在使用 Delta 参数来确定 Delta。
Delta to add to base time
这个参数是要增加到计算时间参数来获取函数结果的纳秒。例如,表示一个从现在开始 3 秒的时间,你可以这样来写你的代码:
dispatch_time_t delay =
dispatch_time(DISPATCH_TIME_NOW, 3.0f * NSEC_PER_SEC); 或者表示从现在开始半秒的时间:
dispatch_time_t delay =
dispatch_time(DISPATCH_TIME_NOW, (1.0 / 2.0f) * NSEC_PER_SEC);
2、dispatch_after_f
分派一个 C 函数到 GCD 在限定的、以纳秒限定的时间之后执行,这个函数接受 4 个参数:
Delay in nanoseconds
在执行给定函数之前 (由第四个参数指定)GCD 必须在指定派送队列(由第二个参数指定) 上等待的纳秒数。
Dispatch queue
C 函数 (由第四个参数指定) 必须在给定延迟(由第一个参数指定)之后在其上执行分派送队列。
Context
一个值在堆中传递到了 C 函数的内存地址 (举例见 5.5)。
C 函数
在特定时间段(由第一个参数指定)之后必须执行的 C 函数在给定分派队列中(由第二个
参数指定)的地址。
double delayInSeconds = 2.0;
dispatch_time_t delayInNanoSeconds=dispatch_time(DISPATCH_TIME_NOW, delayInNanoSeconds*NSEC_PER_SEC);
dispatch_queue_t cur=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_after_f(delayInNanoSeconds, cur, NULL, processSomething);
}
void processSomething(void *paramContext)
{
/* Do your processing here */
NSLog(@"Processing...");
}
二、在 GCD 上一个任务最多执行一次--使用 dispatch_once 函数
函数 dispatch_once,它接受 2 个
参数:
Token
一个类 dispatch_once_t 的 Token 持有 GCD 是代码块第一次执行时生成的 Token。如果
你想最多一次执行一段代码,那么无论什么时候这个代码在 APP 中被调用你必须指定在这
个方法中指定同样的 Token。
Block Object
Block Object 最多执行一次。这个 Block Object 返回时没有值并且没有参数。 dispatch_once 总是被发出呼叫的代码用来在当前队列上执行任务,它可能是一个串行队列、一个并发队列或者一个主队列。
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
});
4月11日 GCD 总结(二)相关推荐
- 4月11日 GCD 总结(一)
有 2 种向主队列分派任务的方法,两者都是异步的,即使在任务没有执行的时候也让你 的程序继续: dispatch_async function 在分派队列上执行一个 Block Object. di ...
- 二年级课程表(3月7日-3月11日)
二年级课程表(3月7日-3月11日) 时 间 周 一 周 二 周 三 周 四 周 五 9:00-9:25 语文(传统文化) 数学(速算巧算) 语文(古诗诵读) 数学 ...
- 二年级课程表(4月11日-4月15日)
二年级课程表(4月11日-4月15日) 时间 周一 周二 周三 周四 周五 9:00-9:25 语文(说文解字) 数学(口诀求商) 语文(口语交际) 数学(应用除法) 语文(古诗诵读) 9:30-9: ...
- D2 日报 2019年6月11日
? 开源项目 ➡️ sfyc23/EverydayWechat watch 34 star 1690 fork 317 每日自动给女朋友发微信暖心话. github.com ➡️ YMFE/yapi ...
- 信号完整性与电源完整性分析_「1月11日 免费视频直播」高速PCB信号完整性和电源完整性仿真实战分析、ADS创新解决方案分享-送给工程师的一份新年礼物...
尊敬的用户 万物互联场景的普遍应用,对于数据传输标准提出了更高的要求. 目前,多数数据传输标准,包括USB4.0.Thunderbolt3.0.以太网.HDMI2.1等,都可以支持一个通道内超过10G ...
- 互联网晚报 | 11月11日 星期四 | 腾讯第三季度营收1424亿元;华为捐赠百万价值职业技能券;货拉拉成立司机权益保障委员会...
今日看点 ✦ 第四届中国国际进口博览会闭幕,累计意向成交707.2亿美元 ✦ 腾讯Q3营收1424亿元,微信及WeChat合并月活跃账户数达12.626亿 ✦ 货拉拉成立司机权益保障委员会,创始 ...
- 四部门联合约谈蚂蚁集团有关人员;苹果11月11日再开发布会;树莓派 400 发布|极客头条
整理 | 郑丽媛 头图 | CSDN 下载自东方 IC 快扫描二维码来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早 ...
- 【历史上的今天】3 月 11 日:谷歌推出 Google Voice;互联网先驱诞生日;Foursquare 上线
整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 3 月 11 日,在 1970 年的今天,"量子之父"潘建伟出生.2016 年 ...
- 分享Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月11日-6月17日)
分享Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月11日-6月17日) 本周Silverlight学习资源更新 Silverlight 自定义tooltip _e ...
最新文章
- C++正则表达式的使用
- 大剑无锋之什么是值传递和引用传递?【面试推荐】
- 【VxWorks系列】任务间同步与通信之共享内存
- python基础(初识Python)
- c语言ip地址转16进制,点分十进制形式的ip地址转化为十六进制数
- python 常用快捷键
- android 常用机型尺寸_android手机屏幕密度和逻辑尺寸
- 如何批量将 webp 格式的图片转换为 jpg 格式
- jwplayer html插件,Angular4使用经验之:jwplayer插件运用到angular4插件普适法
- Android UI开发神兵利器之设计资源
- 【Alpha版本】冲刺阶段——Day 1
- 微一案做php,微一案:真正的高效率,都是这么炼成的
- esxi设置群晖核显直通
- 【Pandas】根据某列分组求和
- Redis三主三从集群搭建(三台机器)
- 物联网之NB-IoT技术实践开发三
- Java游戏碟中谍,煮 Retrofit 论 RxJava(一)
- APP稀有资源及19种无需编程的App创建工具
- 剑指 Offer II 060. 出现频率最高的 k 个数字
- IEEE | DSConv: Efficient Convolution Operator
热门文章
- 目前最常用的计算机机箱类型为_绍兴承接离心风机箱高品质
- 10a大电流稳压芯片_一文教你秒懂LDO芯片电路设计的六大因素
- mysql业务 日志_mysql笔记之日志篇
- python使用xml布局界面_Python:使用ElementTree更新XML文件,同时尽可能地保留布局...
- 五边形lisp程序_CAD LISP 程序
- 从第一范式到第二范式所做的操作是_给女同事讲解MySQL数据库范式与反范式,她直夸我“技术好”
- Directed Roads CodeForces - 711D (基环外向树 )
- CString .Format
- 20155220吴思其 实验2 Windows口令破解
- MasterPage + UpdatePanel + FileUpload