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

 

posted @ 2015-07-19 18:14  驴车手  阅读(177)  评论(0编辑  收藏  举报