GCD之after

简介:

先介绍下C中的modf函数

函数名:modf
头文件:<math.h>
函数原型:double modf(double x, double *ipart)
函数用途:分解x,以得到x的整数和小数部分
输入参数:x
待分解的数输出参数:ipath x 的整数部分
返回值:x 的小数部分
 

多线程开发中,可能会有等待一段时间后再运行的情况,此时就用到了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);

     

    subsecond=modf(interval, &second);

    NSLog(@"%f",second);

    NSLog(@"%f",subsecond);

    time.tv_sec=second;

    time.tv_nsec=subsecond*NSEC_PER_SEC;

     

    milestone=dispatch_walltime(&time, 0);

    NSLog(@"%llu",milestone);

    return milestone;

 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.运行结果



相关文章
|
算法 Java
欧几里得算法(GCD, 辗转相除法)
欧几里得算法(GCD, 辗转相除法)
1447. 最简分数 : 简单数论运用题(求 gcd 几种方式)
1447. 最简分数 : 简单数论运用题(求 gcd 几种方式)
|
机器学习/深度学习
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 所以说代码:
124 0
|
算法
|
算法
gcd算法
原理: 两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。即一步步的降低两个数的值,直到其中一个变成零,这时所剩下的还没有变成零的数就是两个数的最大公约数。
1410 0
|
移动开发 调度
GCD总结(一)
GCD为我们提供了三种类型的调度队列(dispatch queue),分别为串行,并行和主调度队列。     串行(Serial)     你可以创建任意个数的串行队列,每个队列依次执行添加的任务,一个队列同一时刻只能执行一个任务(串行),但是各个队列之间不影响,可以并发执行。
576 0
|
网络性能优化 Swift Go