【问题标题】:Is a conforming implementation impossible on a system with no monotonic clock?在没有单调时钟的系统上是否不可能实现一致的实现?
【发布时间】: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


【解决方案1】:

我想这样的系统应该是某种嵌入式系统。

嗯,这样的systems西红柿可以有独立的实现,只需要标准库的最小子集。 <chrono> 不是最小子集的一部分。

这在 §17.6.1.3 独立实现 [合规] 中定义:

1 定义了两种实现方式:hosted 和 freestanding (1.4)。对于托管实现,这 国际标准描述了一组可用的标头。

2 独立实现有一组实现定义的标头。该集合应至少包括 表 16 中显示的标题。

表 16 包含以下标题:<ciso646>、<cstddef>、<cfloat>、<limits>、<climits>、<cstdint>、<cstdlib>、<new>、@9876543315@、@98765 <initializer_list>、<cstdalign>、<cstdarg>、<cstdbool>、<type_traits>、<atomic>。

请注意,这并不意味着这样的实现不能为 <chrono> 标头提供可以在其中实现的所有内容,但不能提供其余部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-12
    • 2013-05-19
    • 1970-01-01
    • 2021-04-08
    • 2012-11-01
    • 2017-12-27
    • 1970-01-01
    • 2013-06-11
    相关资源
    最近更新 更多