iOS

sleep()和usleep()的使用和区别

2017-04-07  本文已影响396人  凉风起君子意如何

原文链接,感谢网友分享

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的几点:

  1. 功能与sleep类似,只是传入的参数单位是微妙
  2. 若想最佳利用cpu,在更小的时间情况下,选择用usleep
  3. sleep传入的参数是整形,所以不能传了小数
  4. 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显然体验是非常不好的,回头可以自己改改试试。

MBProgressHUD demo

附:

时钟换算:
微秒,时间单位,符号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)

上一篇下一篇

猜你喜欢

热点阅读