usleep内循环花费的时间太长

时间:2018-12-12 13:33:45

标签: c++ c++11 thread-sleep usleep

在下面的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;
}

但是结果如下:

  • 第一种方法:恰好花费1.5秒
  • 第二种方法:大约需要1.5分钟!

实际上,我将需要第二种方法。根据这个Answer,我认为我需要一个比usleep()更准确的功能。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

来自the documentation(重点是我)

  

usleep()函数暂停执行以下操作的调用线程:          (至少)微秒。睡眠时间可能会稍微延长          通过任何系统活动或通过处理呼叫所花费的时间或          系统计时器的粒度。

所以换句话说,之所以需要更长的时间,是因为它现在要“入睡”并“唤醒” 1500000次,而不是一次,并且睡眠时间如此短,因此开销可能比实际的微秒睡眠。