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

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的纳秒精度下,其他一些超高频处理器真的能返回相同的值吗?

eer*_*ika 6

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

标准不保证。引自最新草案:

[时间.时钟.稳定]

stable_clock 类的对象表示 time_point 的值永远不会随着物理时间的前进而减少的时钟,并且 time_point 的值相对于实时以稳定的速率前进。也就是说,时钟可能不会被调整。

保持不变满足“永不减少”的要求。

时钟具有有限的粒度,如果粒度小于对 的调用频率now,那么理论上可以在两次调用之间保持相同的值。调用的复杂性是对再次出现相同值的实际限制,但这是偶然的。


如果您希望避免重复值,那么您可以通过存储最后一个时间戳来切实避免这种可能性。如果新的等于或小于旧的,则将新的微调一个度量单位。如果存在三个相等的值并且第二个因此被推到第三个之上,则“较少”部分成为可能。

  • @BillKotsias 我不知道是否有任何“强制执行”。您的观察可能是偶然的。 (3认同)

Nic*_*las 5

steady_clock要求不倒退,要求有规律地前进。就是这样。甚至不需要具有纳秒精度(或时钟的实际精度以匹配其时间点的精度)。

对于你正在做的事情,让你自己的内部计数器在你每次计算时都会上升是一个更好的选择。