让我通过这个测试程序问我的问题:
#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 much nanoseconds std::cout takes?" << 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或1000300或1000400或1000500或1000600或2000600(= 1或2微秒)。显然,无论是分辨率std::chrono是不是 100毫微秒或我衡量的时间的方式std::cout是错误的。(例如,为什么我从来没有收到1到2微秒之间的信号1500000?)
我需要C ++中的高分辨率计时器。操作系统本身提供了高分辨率计时器,因为我可以Stopwatch在同一台计算机上使用C#类以微秒级的精度进行测量。因此,我只需要正确使用操作系统所具有的高分辨率计时器即可!
如何修复程序以产生预期的结果?
当年话下
慕妹3242003
开心每一天1111
相关分类