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.運行結果
總結
- 上一篇: 【原创】RabbitMQ之Queue属性
- 下一篇: NETSH WINSOCK RESET这