c++ - 是否确保 2 个连续的 std::chrono::steady_clock::now() 不相等?

标签 c++ c++14 std clock c++-chrono

我希望在同一运行线程中选取的时间点永远不会相等。这是因为我使用时间点来区分不同的计算结果。

伪代码:

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/

相关文章:

c++ - 我如何开始使用 boost

c++ - 内存泄漏和多态性

c++ - 成员函数 Outer::f() 不是类 Outer::Inner 的 friend 。为什么?

C++ std::queue push pop 两个不同的对象获取第一个对象

c++ - 什么是多重再继承?

c++ - 在 C++ 中读取内存时出现段错误

c++ - 具有非专用模板参数的虚拟方法

c++ - 将 char* 转换为 Unicode std::string

c++ - Emscripten: algorithm.h 文件未找到

c++ - 双数组 Trie 问题