我希望在同一运行线程中选取的时间点永远不会相等。这是因为我使用时间点来区分不同的计算结果。
伪代码:
StampedResult fn() {
auto result = Calculations();
auto time_stamp = std::chrono::steady_clock::now();
return {time_stamp, result);
}
现在,如果Calculations()
总是很复杂,那么就会自动解决。但有时,Calculations()
可能会立即返回。
所以,我想我应该检查对 steady_clock::now()
的 2 个连续调用是否可以返回相同的值,如下所示:
https://onlinegdb.com/BkiDAZRe8
在 onlinegdb.com
和我的笔记本电脑 Intel® Core™ i7-8750H CPU @ 2.20GHz
上,我从未得到相同的返回值。但考虑到 steady_clock
的纳秒精度,其他超高频处理器是否真的可以返回相同的值?
最佳答案
Is it ensured that 2 sequential std::chrono::steady_clock::now() will not be equal?
标准不保证这一点。引用最新草案:
[time.clock.steady]
Objects of class steady_clock represent clocks for which values of time_point never decrease as physical time advances and for which values of time_point advance at a steady rate relative to real time. That is, the clock may not be adjusted.
保持不变满足“永不减少”的要求。
时钟的粒度有限,如果粒度小于调用now
的频率,则理论上两次调用之间的值保持相同是可行的。调用的复杂性是对再次出现相同值的实际限制,但这是偶然的。
如果您希望避免重复值,那么您可以通过存储最后一个时间戳来切实防止这种可能性。如果新值等于或小于旧值,则将新值向上移动一个测量单位。如果存在三个相等的值,则“较少”部分成为可能,因此第二个值被推到第三个值之上。
关于c++ - 是否确保 2 个连续的 std::chrono::steady_clock::now() 不相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59774027/