sleep想必都知道,作用是讓進程掛起一段時間,參數是秒。但是很羞愧,對於usleep,我居然想當然以為是解除進城掛起,作為對自己的的懲罰,特意寫下這篇文章。
在iOS中 如果 在主線程中用這2個 都會 對 主線程 造成 阻塞
函數名:** sleep**
頭文件: #include <windows.h> // 在VC中使用帶上頭文件,或#include <unistd.h> // 在gcc編譯器中,使用的頭文件因gcc版本的不同而不同
功 能: 執行掛起指定的秒數
語 法: unsigned sleep(unsigned seconds);
函數名:** usleep**
頭文件: #include <unistd.h>
功 能: usleep功能把進程掛起一段時間, 單位是微秒(百萬分之一秒);
語 法: void usleep(int micro_seconds);
返回值: 無
內容說明:本函數可暫時使程序停止執行。參數 micro_seconds 為要暫停的微秒數(us)。
注 意:
這個函數不能工作在windows 操作系統中。用在Linux的測試環境下面。 參 見:usleep() 與sleep()類似,用於延遲掛起進程。進程被掛起放到reday queue。 是一般情況下,延遲時間數量級是秒的時候,盡可能使用sleep()函數。 如果延遲時間為幾十毫秒(1ms = 1000us),或者更小,盡可能使用usleep()函數。這樣才能最佳的利用CPU時間
從上面引用網頁的知識能得出關於usleep的幾點:
- 功能與sleep類似,只是傳入的參數單位是微妙
- 若想最佳利用cpu,在更小的時間情況下,選擇用usleep
- sleep傳入的參數是整形,所以不能傳了小數
- usleep不能工作在windows上,只能在linux下(深深的體會到API對平台系統的嚴格要求,轉念想想跨平台的語言是多么強大,多么爽啊,比如java)
usleep使用場景
MBProgressHUD demo中Moding switching模式中就用到了。代碼如下:
- (void)doSomeWorkWithMixedProgress { MBProgressHUD *hud = [MBProgressHUD HUDForView:self.navigationController.view]; // Indeterminate mode sleep(2); // Switch to determinate mode dispatch_async(dispatch_get_main_queue(), ^{ hud.mode = MBProgressHUDModeDeterminate; hud.label.text = NSLocalizedString(@"Loading...", @"HUD loading title"); }); float progress = 0.0f; while (progress < 1.0f) { progress += 0.01f; dispatch_async(dispatch_get_main_queue(), ^{ hud.progress = progress; }); usleep(50000); } // Back to indeterminate mode dispatch_async(dispatch_get_main_queue(), ^{ hud.mode = MBProgressHUDModeIndeterminate; hud.label.text = NSLocalizedString(@"Cleaning up...", @"HUD cleanining up title"); }); sleep(2); dispatch_sync(dispatch_get_main_queue(), ^{ UIImage *image = [[UIImage imageNamed:@"Checkmark"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; hud.customView = imageView; hud.mode = MBProgressHUDModeCustomView; hud.label.text = NSLocalizedString(@"Completed", @"HUD completed title"); }); sleep(2); }
代碼中usleep(50000)換成sleep顯然體驗是非常不好的,回頭可以自己改改試試。
附:
時鍾換算:
微秒,時間單位,符號us(英語:microsecond ).
1微秒等於百萬分之一秒(10的負6 次方秒)
0.000 001 微秒 = 1皮秒
0.001 微秒 = 1納秒
1,000 微秒 = 1毫秒
1,000,000 微秒 = 1秒
1s = 1000ms
1ms = 1000μs
1μs = 1000ns
1ns = 1000ps
1秒(s) = 1000 毫秒(ms) = 1,000,000 微秒(μs) = 1,000,000,000 納秒(ns) = 1,000,000,000,000 皮秒(ps)
作者:普度千言
鏈接:https://www.jianshu.com/p/ccdb9be5c6ef
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。