首页 > 解决方案 > usleep inside loop 耗时太长

问题描述

在下面的 C++ 程序中,我使用该函数usleep()休眠 1.5 秒。我在 2 种等效方法中实现了这一点,如下所示:

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

using namespace std;

int main() {
    //METHOD #1
    cout<<"sleep"<<endl;
    usleep(1500000);
    cout<<"wake up"<<endl;

    //METHOD #2
    cout<<"sleep"<<endl;
    for(int i=0; i<1500000; i++)
        usleep(1);
    cout<<"wake up"<<endl;

    return 0;
}

但是结果如下:

实际上,我需要第二种方法。根据这个答案,我想我需要一个更准确的函数usleep()。有人可以帮忙吗?

标签: c++c++11thread-sleepusleep

解决方案


文档(强调我的)

usleep() 函数将调用线程的执行暂停 (至少) usec 微秒。任何系统活动或处理调用所花费的时间或系统计时器的粒度都可能会稍微延长睡眠时间。

所以换句话说,它需要更长的时间的原因是因为它现在“进入睡眠”和“唤醒”1500000次而不是一次,并且在如此短的睡眠持续时间下,这个开销可能比实际的微秒大得多睡觉。


推荐阅读