使用以下计时器的最简单方法 我现在正试图用一个旧的Python代码重写C++中的一些软件。 在python版本中,我曾经使用过如下计时器: from time import time, sleep t_start = time() while (time()-t_start < 5) # 5 second timer # do some stuff sleep(0.001) #Don't slam the CPU sleep(1) print time()-t_start # would print something like 6.123145 notice the precision!

使用以下计时器的最简单方法 我现在正试图用一个旧的Python代码重写C++中的一些软件。 在python版本中,我曾经使用过如下计时器: from time import time, sleep t_start = time() while (time()-t_start < 5) # 5 second timer # do some stuff sleep(0.001) #Don't slam the CPU sleep(1) print time()-t_start # would print something like 6.123145 notice the precision!,c++,boost,time.h,C++,Boost,Time.h,我也尝试过从中获取时间(struct,NULL),但是每当我使用boost::this\u thread::sleep睡眠程序时,它都不计算时间 我希望这里有人遇到过类似的问题并找到了解决办法 另外,我确实需要至少毫秒精度的dt,因为在 //做些事情 代码的一部分我可能很早就打破while循环,我需要知道我在里面呆了多长时间,等等 谢谢你的阅读 当系统时间出现不连续的跳跃时,就会出现问题 有关便携式毫秒精度,请查看 这里有一个小片段: chrono::high_resolution_clock:

我也尝试过从
中获取时间(struct,NULL),但是每当我使用
boost::this\u thread::sleep
睡眠程序时,它都不计算时间

我希望这里有人遇到过类似的问题并找到了解决办法

另外,我确实需要至少毫秒精度的dt,因为在

//做些事情

代码的一部分我可能很早就打破while循环,我需要知道我在里面呆了多长时间,等等

谢谢你的阅读

当系统时间出现不连续的跳跃时,就会出现问题

有关便携式毫秒精度,请查看

这里有一个小片段:

chrono::high_resolution_clock::time_point ts = chrono::high_resolution_clock::now();
chrono::high_resolution_clock::time_point te = chrono::high_resolution_clock::now();
// ... do something ...
cout << "took " << chrono::duration_cast<chrono::milliseconds>(te - ts).count() << " millisecs\n";
chrono::高分辨率时钟::时间点ts=chrono::高分辨率时钟::现在();
chrono::高分辨率时钟::时间点te=chrono::高分辨率时钟::现在();
// ... 做点什么。。。

难道你没有得到一个浮点结果吗?因为时间是整数类型,根据时间的不同,是否可以将差异存储为双精度?需要提到Windows的boost::chrono(我相信MSVS2015 CTP可能会修复分辨率?。@ch0l1n3
c::duration\u cast(duration).count()/1000.0
e.g.(c=std::chrono)像这样?double dt=chrono::duration\u cast(te-ts).count()/1000.0另外,我使用的是linux,所以解决方案可能不同!我的理解是,
chrono::high_resolution_clock
不保证“稳定”而不是“跳跃”。
chrono::high_resolution_clock::time_point ts = chrono::high_resolution_clock::now();
chrono::high_resolution_clock::time_point te = chrono::high_resolution_clock::now();
// ... do something ...
cout << "took " << chrono::duration_cast<chrono::milliseconds>(te - ts).count() << " millisecs\n";