温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++ sleep()和usleep()的区别是什么

发布时间:2023-03-09 10:36:32 来源:亿速云 阅读:94 作者:iii 栏目:开发技术

本篇内容介绍了“C++ sleep()和usleep()的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

sleep() 和 usleep()主要区别前者单位为秒,后者为微妙(*1e6)

C++ sleep() 和 usleep()

代码如下:设置一个时间参数,分别向sleep()和usleep()方法传入该参数,打印sleep和usleep前后的系统时间戳

#include <time.h>
#include <stdio.h>
#include <iostream>
#include <unistd.h>

using namespace std;
int main(int argc, char *argv[]){
    int sleep_time = 100;
    cout << "sleep before time: " << time(NULL) << endl;
    sleep(sleep_time);
    cout << "sleep after time: " << time(NULL) << endl;

    cout << "======================" << endl;

    cout << "usleep before time: " << time(NULL) << endl;
    usleep(sleep_time);
    cout << "usleep after time: " << time(NULL) << endl;
}

运行结果:

sleep before time: 1560257692
sleep after time: 1560257792
======================
usleep before time: 1560257792
usleep after time: 1560257792

从运行结果来看,sleep()方法执行前后的时间戳相减正好是sleep_time大小,打印的时间戳是以秒为单位的,所以sleep()方法将程序挂起使用的单位是秒级别的;从usleep()执行前后的时间戳来看,感觉上程序并没有被挂起,这是因为usleep()方法将程序挂起的使用的单位是微秒级别的(1,000,000 微秒 = 1秒)所以程序看起来并没有被挂起,下面我们将打印的时间戳改为微秒级别的看看。

可以通过<sys/time.h>库中的gettimeofday()方法来拿到当前系统的微秒级别时间。

#include <stdio.h>
#include <iostream>
#include <unistd.h>
#include <sys/time.h>

using namespace std;
int main(int argc, char *argv[]){
    int sleep_time = 100;
    cout << "sleep before time: " << time(NULL) << endl;
    sleep(sleep_time);
    cout << "sleep after time: " << time(NULL) << endl;

    cout << "======================" << endl;

    cout << "usleep before time: " << time(NULL) << endl;
    usleep(sleep_time);
    cout << "usleep after time: " << time(NULL) << endl;

    cout << "======================" << endl;
    struct timeval tv;  
    gettimeofday(&tv,NULL); 
    cout << "not usleep before time: " << tv.tv_sec<<"s,"<<tv.tv_usec<<"微秒"<<endl;
    usleep(0);
    gettimeofday(&tv,NULL); 
    cout << "not usleep after time: " << tv.tv_sec<<"s,"<<tv.tv_usec<<"微秒"<<endl;
    cout << "======================" << endl;
    gettimeofday(&tv,NULL); 
    cout << "usleep before time: " << tv.tv_sec<<"s,"<<tv.tv_usec<<"微秒"<<endl;
    usleep(sleep_time);
    gettimeofday(&tv,NULL); 
    cout << "usleep after time: " << tv.tv_sec<<"s,"<<tv.tv_usec<<"微秒"<<endl;
}

运行结果

sleep before time: 1560260201
sleep after time: 1560260301
======================
usleep before time: 1560260301
usleep after time: 1560260301
======================
not usleep before time: 1560260301s,491772微秒
not usleep after time: 1560260301s,491948微秒
======================
usleep before time: 1560260301s,491962微秒
usleep after time: 1560260301s,492191微秒

从使用usleep(0)和使用了usleep(100)方法来看,执行前后的时间差差不多相差100,从而可以看出usleep()是以微秒级别为单位的。

“C++ sleep()和usleep()的区别是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI