c++ - 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;
}
但是结果如下:
- 第一种方法:正好需要 1.5 秒
- 第二种方法:大约需要1.5分钟!
实际上,我需要第二种方法。根据这个答案,我想我需要一个更准确的函数usleep()
。有人可以帮忙吗?
解决方案
从文档(强调我的)
usleep() 函数将调用线程的执行暂停 (至少) usec 微秒。任何系统活动或处理调用所花费的时间或系统计时器的粒度都可能会稍微延长睡眠时间。
所以换句话说,它需要更长的时间的原因是因为它现在“进入睡眠”和“唤醒”1500000次而不是一次,并且在如此短的睡眠持续时间下,这个开销可能比实际的微秒大得多睡觉。
推荐阅读
- azure - 在流分析中获取消息对象属性
- javascript - 调用 setState 时反应本机状态字段未定义
- sql - 更改数据类型而不更改“非空”约束
- android - 如何在 ionic HTML 移动 UI 的登录表单中隐藏水平线?
- python - 如何在结构化流中获取 DataFrame?
- magento2 - 在 magento 2 中安装了横幅滑块,但没有任何效果
- elixir - handle_info 或 handle_call 期间的 Genserver 状态更改
- vba - 将对象添加到另一个 Object VBA
- c++ - 将 BGRA 像素转换为灰度
- python - 在 Python 中填充空字典