GCD之after
先介紹下C中的modf函數(shù)
函數(shù)名:modf 頭文件:<math.h> 函數(shù)原型:double modf(double x, double *ipart) 函數(shù)用途:分解x,以得到x的整數(shù)和小數(shù)部分 輸入?yún)?shù):x 待分解的數(shù)輸出參數(shù):ipath x 的整數(shù)部分 返回值:x 的小數(shù)部分多線程開發(fā)中,可能會有等待一段時間后再運(yùn)行的情況,此時就用到了dispatch_after函數(shù),調(diào)用該函數(shù)時第一個參數(shù)用的dispatch_time_t類型的值。該值使用dispatch_time函數(shù)或者dispatch_walltime函數(shù)完成。
1.dispatch_time函數(shù)能夠獲取從第一個參數(shù)dispatch_tiem_t類型值指定的時間開始,到第二個參數(shù)指定的毫秒單位時間后的時間。第一個參數(shù)經(jīng)常使用的值是之前源代碼出現(xiàn)的DISPATCH_TIME_NOW,表示現(xiàn)在的時間。第二個參數(shù)是等待時間。該方法主要計算相對時間。
//#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函數(shù)主要用于計算絕對時間。例如在dispatch_after函數(shù)想指定2015年03月27日11時11分11秒的這一絕對時間的情況,這可作為粗略的鬧鐘功能使用。在dispatch_walltime函數(shù)中要一個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.運(yùn)行該方法的結(jié)果如下圖(主要是查看modf方法)
?4.學(xué)習(xí)完dispatch_time_t,下面再學(xué)習(xí)dispatch_after.
dispatch_after函數(shù)并不是在指定的時間后執(zhí)行處理,而只是在指定的時間追加處理到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.運(yùn)行結(jié)果
總結(jié)
- 上一篇: 【原创】RabbitMQ之Queue属性
- 下一篇: NETSH WINSOCK RESET这