GCD多线程的使用(五)
上一篇有个函数没有说:dispatch_walltime,这个函数是由struct timespec类型的时间得到dispatch_time_t类型的值。dispatch_time函数通常用于计算相对时间,dispatch_walltime函数用于计算绝对时间。
struct timespec类型的时间可以通过NSDate类的对象生成:
- (void) getDispatchTime { double second, subsecond; struct timespec time; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *date = [dateFormatter dateFromString:@"2015-06-19 16:14:10"]; NSTimeInterval interval = [date timeIntervalSince1970]; //从1970到date这个时间过去的秒数 subsecond = modf(interval, &second); //modf 分解一个值,返回小数部分,第二个参数输出整数部分 time.tv_sec = second; time.tv_nsec = subsecond * NSEC_PER_SEC; dispatch_time_t dispatchTime = dispatch_walltime(&time, 0); NSLog(@"now..."); dispatch_after(dispatchTime, dispatch_get_main_queue(), ^{ NSLog(@"%@", date); }); }
输出结果:
2015-06-19 16:13:47.100 GCD_Study[23839:607] now... 2015-06-19 16:14:10.001 GCD_Study[23839:607] 2015-06-19 08:14:10 +00