sleep()和usleep()的使用和区别
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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。