zoukankan      html  css  js  c++  java
  • 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的几点:

    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)



    作者:普度千言
    链接:https://www.jianshu.com/p/ccdb9be5c6ef
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    QuickContactBadge
    第一周——15选1
    UVA 10036 Divisibility
    POJ 3984 迷宫问题
    POJ 3258 River Hopscotch
    CodeForces 230A Dragons
    HDU 4450 Draw Something
    POJ 2485(PRIME算法)
    HDU 1213
    CodeForces 16E
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/13628418.html
Copyright © 2011-2022 走看看