【发布时间】:2012-11-11 03:11:45
【问题描述】:
<chrono> 标头定义了表示单调时钟的类 steady_clock - 也就是说,now() 的值不会随着物理时间的增加而减少。这个类虽然没有被标记为可选,那么如果实现因为它运行在一个没有单调时间源的系统上而无法实现它会发生什么?
看一下libstdc++源码,在_GLIBCXX_USE_CLOCK_MONOTONIC没有定义的情况下,steady_clock简单定义为:
typedef system_clock steady_clock;
system_clock 不一定稳定,因此这可能(并且可能会)打破steady_clock 的要求。
在没有单调时间源的系统上是否不可能实现 C++11 的一致性?为什么不让steady_clock 像intX_t 类型一样可选?
【问题讨论】:
-
是否存在无法实现单调时钟的系统?
-
该死,现在我认为这是一个愚蠢的问题。我想我只是这么假设的。
-
是的,有这样的系统。我有一个必须在没有任何时间源的情况下凑合。
-
这相当于问“在番茄上是否不可能实现符合标准的实现?”
-
除了公认的答案之外,即使在没有稳定时钟的系统上也可以实现单调时钟:让
steady_clock跟踪最后返回的时间值。如果当前值是“之前”,那么只需返回最后一个值。当然,这并不理想,但now()的值永远不会随着物理时间的增加而减少。
标签: c++ time c++11 implementation chrono