This question already has answers here:
usleep() to calculate elapsed time behaves weird

(2 个回答)


2年前关闭。




在下面的 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() 更准确的函数。有人可以帮忙吗?

    最佳答案

    来自 the documentation(强调我的)



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

    关于c++ - usleep 内循环花费的时间太长,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53744238/

    10-11 18:26