让我通过这个测试程序问我的问题:
#include <iostream>
#include <chrono>
using std::chrono::nanoseconds;
using std::chrono::duration_cast;
int main(int argc, char* argv[])
{
std::cout
<< "Resolution (nano) = "
<< (double) std::chrono::high_resolution_clock::period::num /
std::chrono::high_resolution_clock::period::den *
1000 * 1000 * 1000
<< std::endl;
auto t1 = std::chrono::high_resolution_clock::now();
std::cout << "How many nanoseconds does std::cout take?" << std::endl;
auto t2 = std::chrono::high_resolution_clock::now();
auto diff = t2-t1;
nanoseconds ns = duration_cast<nanoseconds>(diff);
std::cout << "std::cout takes " << ns.count() << " nanoseconds"
<< std::endl;
return 0;
}
我机器上的输出:
分辨率(纳米)= 100
std::cout 需要多少纳秒?
std::cout 需要 1000200 纳秒
我收到1000200
or 1000300
or 1000400
or 1000500
or 1000600
or2000600
作为结果(= 1 或 2 微秒)。显然,要么分辨率std::chrono
不是100 纳秒,要么我测量时间的方式是错误的。(例如,为什么我从来没有收到 1 到 2 微秒之间的信息?)std::cout
1500000
我需要一个 C++ 中的高分辨率计时器。操作系统本身提供了一个高分辨率计时器,因为我能够Stopwatch
在同一台机器上使用 C# 类以微秒精度测量事物。所以我只需要正确使用操作系统拥有的高分辨率计时器!
如何修复我的程序以产生预期的结果?