GCD学习之——dispatch_after

dispatch_after
经常会有这样的情况:想要在3秒后执行处理。这种想在指定直接后执行处理的情况,可使用dispatch_after函数。
在3秒后将指定的Block追加到Main Dispatch Queue中的源代码为:

   dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW,3ull * NESC_PER_SEC);

   dispatch_after(time,dispatch_get_main_queue(),^{
        NSLog(@"waited at least there seconds.");
});

需要注意的是,dispatch_after函数并不是在指定时间后执行处理,而只是在指定时间追加处理到Dispatch Queue。此源代码与在3秒后用dispatch_async函数追加Block到Main Dispatch Queue的相同。
该函数第一个参数是指定时间用的dispatch_time_t类型的值。该值使用dispatch_time函数或dispatch_walltime函数作成。第二个参数指定要追加的Dispatch Queue,第三个参数指定记述要执行处理的Block。
dispatch_time函数能够获取从第一个参数dispatch_time_t类型值中指定的时间开始,到第二个参数指定的毫微秒单位时间后的时间。第一个参数经常使用的值是之前源代码中出现的DISPATCH_TIME_NOW。这表示现在的时间。即以下源代码可得到 表示从现在开始1秒后的dispatch_time_t类型的值。

 dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW,1ull * NESC_PER_SEC);

数值和NSEC_PER_SEC的乘积得到单位为毫微秒的数值。”ull”是C语言的数值字面量,是显示表明类型时使用的字符串(表示”unsigned long long”).如果使用NSEC_PER_MSEC则可以以毫秒为单位计算。即以下源代码可得到 表示从现在开始150毫秒后的dispatch_time_t类型的值。

 dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW,150ull * NESC_PER_MSEC);

dispatch_walltime函数有POSIX中使用的struct time spec类型的时间得到dispatch_time_t类型的值。dispatch_time函数通常用于计算相对时间,而dispatch_walltime函数用于计算绝对时间。

你可能感兴趣的:(ios,线程,Concurrent,gcd)