【发布时间】:2015-02-04 00:10:54
【问题描述】:
我希望我的应用程序正好休眠 2000 微秒:
#include <iostream>
#include <chrono>
#include <thread>
std::cout << "Hello waiter" << std::endl;
std::chrono::microseconds dura( 2000 );
auto start = std::chrono::system_clock::now();
std::this_thread::sleep_for( dura );
auto end = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
std::cout << "Waited for " << elapsed.count() << " microseconds" << std::endl;
这会导致
Waited for 2620 microseconds
这种差异从何而来?有没有更好(更精确)的方法可用?
谢谢!
【问题讨论】:
-
操作系统对于何时应该安排线程有自己的看法,并且您只能保证获得至少
durams 的睡眠时间。 -
dlf 是对的,操作系统的细节很有趣。在虚拟机中运行测试也会产生影响。
-
忙等待可能会以处理器资源为代价提供更好的精度。这是一笔交易。
-
我使用的是 MacOS 10.10