GCD之after
After gcd
2023-09-14 08:57:58 时间
多线程开发中,可能会有等待一段时间后再运行的情况,此时就用到了dispatch_after函数,调用该函数时第一个参数用的dispatch_time_t类型的值。该值使用dispatch_time函数或者dispatch_walltime函数完成。
1.dispatch_time函数能够获取从第一个参数dispatch_tiem_t类型值指定的时间开始,到第二个参数指定的毫秒单位时间后的时间。第一个参数经常使用的值是之前源代码出现的DISPATCH_TIME_NOW,表示现在的时间。第二个参数是等待时间。该方法主要计算相对时间。
//#define NSEC_PER_SEC 1000000000ull 1秒 //#define NSEC_PER_MSEC 1000000ull 1毫秒 //#define USEC_PER_SEC 1000000ull 1毫秒 //#define NSEC_PER_USEC 1000ull 1纳秒 //ull 1皮秒 1毫微秒2.dispatch_walltime函数主要用于计算绝对时间。例如在dispatch_after函数想指定2015年03月27日11时11分11秒的这一绝对时间的情况,这可作为粗略的闹钟功能使用。在dispatch_walltime函数中要一个struct timespec类型的时间,该时间可以通过NSDate类对象完成。
NSTimeInterval interval; double second,subsecond; struct timespec time; dispatch_time_t milestone; interval=[date timeIntervalSince1970]; NSLog(@"%f",interval);3.运行该方法的结果如下图(主要是查看modf方法)
4.学习完dispatch_time_t,下面再学习dispatch_after.
dispatch_after函数并不是在指定的时间后执行处理,而只是在指定的时间追加处理到Dispatch Queue。
NSDate *startDate=[NSDate date]; NSLog(@"%@",startDate); dispatch_time_t time=dispatch_time(DISPATCH_TIME_NOW, 30*NSEC_PER_SEC); dispatch_after(time, dispatch_get_main_queue(), ^{ NSLog(@"test"); NSDate *endDate=[NSDate date]; NSLog(@"%@",endDate); NSDate *endDate=[NSDate date]; NSLog(@"%@",endDate);5.运行结果
3045 Lcm与Gcd构造 gcd(a,b) = n lcm(a,b) = m 求min(a,b)是多少 通过gcd的了解我们可以知道,两个数a == k1 * n以及b == k2 * n并且gcd(k1,k2) == 1 ab == n * m m == a * b/n ab == k1 * k2 * n * n 于是可以得到 m == k1 * k2 * n 将n除到左边,可以得出m/n == k1 * k2 于是k1 和 k2 都是 m / n的因子 这样就可以以根号的复杂度找出这两个因子,并判断k1 和 k2 是否是互质的 a + b == (k1 + k2 ) * n 所以说代码:
原理: 两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。即一步步的降低两个数的值,直到其中一个变成零,这时所剩下的还没有变成零的数就是两个数的最大公约数。
GCD总结(一) GCD为我们提供了三种类型的调度队列(dispatch queue),分别为串行,并行和主调度队列。 串行(Serial) 你可以创建任意个数的串行队列,每个队列依次执行添加的任务,一个队列同一时刻只能执行一个任务(串行),但是各个队列之间不影响,可以并发执行。
全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯 C 语言,提供了非常多强大的函数 GCD的优势: GCD 是苹果公司为多核的并行运算提出的解决方案; GCD 会自动利用更多的 CPU 内核(比如...
社会主义 从.Net到iOS,在撸的道路上越走越远,工作之余经营着博客园http://www.cnblogs.com/5ishare,欢迎小伙伴(妹子更好)一起交流,谈谈人生理想。作为经常从网上索取免费资料的一员,要有回报回报的思想,也让更多的人少走弯路.
相关文章
- After Effects 2021直装版(AE 2021中文版) 支持M1 mac/win
- AE2023安装After Effects 2022原生版(AE2022) 各版本获取+干货分享
- 全版本Ae(After Effects软件mac版本2019安装教程)
- Adobe After Effects 2015 中文版安装教程-Ae软件全版本下载地址
- 视频特效剪辑软件AE 2023中文版,Adobe After Effects安装教程
- Adobe After Effects 2022/2021视频制作软件安装教程+安装包
- ORA-27470: failed to re-enable “string.string” after making requested change ORACLE 报错 故障修复 远程处理
- ORA-31624: A job cannot be modified after it has started. ORACLE 报错 故障修复 远程处理
- ORA-12830: Must COMMIT or ROLLBACK after executing parallel INSERT/UPDATE/DELETE ORACLE 报错 故障修复 远程处理
- ORA-12831: Must COMMIT or ROLLBACK after executing INSERT with APPEND hint ORACLE 报错 故障修复 远程处理
- MySQL Error number: MY-013979; Symbol: ER_BULK_PARSER_UNEXPECTED_CHAR_AFTER_NULL_ESCAPE_LOG; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-013980; Symbol: ER_BULK_PARSER_UNEXPECTED_CHAR_AFTER_COLUMN_TERMINATOR_LOG; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Status Mysqlx_ssl_server_not_after 数据库状态作用意思及如何正确
- jQuery中append、insertBefore、after与insertAfter的简单用法与注意事项