Bil*_*ias 4 c++ std clock c++-chrono c++14
我希望在同一个运行线程中选择的时间点永远不相等。那是因为我用时间点来区分不同的计算结果。
伪代码:
StampedResult fn() {
auto result = Calculations();
auto time_stamp = std::chrono::steady_clock::now();
return {time_stamp, result);
}
Run Code Online (Sandbox Code Playgroud)
现在,如果Calculations()总是很复杂,那会自动解决。但有时,Calculations()可能会立即返回。
所以,我想我应该检查 2 个连续调用是否steady_clock::now()可以返回相同的值,如下所示:
https://onlinegdb.com/BkiDAZRe8
在onlinegdb.com我的笔记本电脑上,Intel® Core™ i7-8750H CPU @ 2.20GHz我从来没有得到相同的值。但是,在给定steady_clock的纳秒精度下,其他一些超高频处理器真的能返回相同的值吗?
是否确保 2 个连续的 std::chrono::steady_clock::now() 不相等?
标准不保证。引自最新草案:
[时间.时钟.稳定]
stable_clock 类的对象表示 time_point 的值永远不会随着物理时间的前进而减少的时钟,并且 time_point 的值相对于实时以稳定的速率前进。也就是说,时钟可能不会被调整。
保持不变满足“永不减少”的要求。
时钟具有有限的粒度,如果粒度小于对 的调用频率now,那么理论上可以在两次调用之间保持相同的值。调用的复杂性是对再次出现相同值的实际限制,但这是偶然的。
如果您希望避免重复值,那么您可以通过存储最后一个时间戳来切实避免这种可能性。如果新的等于或小于旧的,则将新的微调一个度量单位。如果存在三个相等的值并且第二个因此被推到第三个之上,则“较少”部分成为可能。
steady_clock要求不倒退,要求有规律地前进。就是这样。甚至不需要具有纳秒精度(或时钟的实际精度以匹配其时间点的精度)。
对于你正在做的事情,让你自己的内部计数器在你每次计算时都会上升是一个更好的选择。