【问题标题】:How do steady clocks interact with limited-bit time representations?稳定时钟如何与有限位时间表示交互?
【发布时间】:2013-04-04 16:57:19
【问题描述】:

20.11.7.2/1 开始:

steady_clock 类的对象 表示 time_point 的值永远不会减少的时钟 物理时间提前,time_point 的值提前 相对于实时的稳定速率。也就是说,时钟可能不是 调整。

从概念上讲,这很不错,但考虑到几乎可以肯定表示一个时间点的位数是有限的,所以很难想象一个稳定时钟的值永远保持增长的实现。

20.11.3/2 似乎支持了我缺乏想象力,因为它(在非规范性注释中)指的是“环绕”的时钟。这表明如果我有一个time_point t1 和后来的time_point t2 取自同一个稳定时钟,t2 可能会出现更早的时间,因为时钟可能在t1t2 之间循环。

我发现很难理解该领域的标准。有人可以澄清一下稳定时钟和时钟包装的关系和相互作用吗?

【问题讨论】:

    标签: c++ c++11 chrono


    【解决方案1】:

    请在您实际见证steady_clock 翻转时提交错误报告。在我的系统上,如果我在接下来的 292 年内不重新启动计算机,那将发生在 2305 年。如果我当时没有回应,请见谅。 :-)

    顺便说一句,实现需要支持足够大的位长度,以便在实际持续时间内无法观察到时钟翻转。从计算机启动时开始以 64 位整数计算纳秒是一种合理的实现方式。

    【讨论】:

    • 标准中是否有规定稳定时钟在换行前运行的最短时间?在具有 16 位字的机器上,稳定时钟是否可以使用 16 位表示,例如毫秒?
    • 我不这么认为。首次提出时,甚至不需要所有平台都支持steady_clock(当时命名为monotonic_clock)。它被“有条件地支持”。但委员会决定授权其支持。还要求使用至少 64 位的 long long 类型。所以推测,如果一台机器可以支持 long long,它可以支持一个 64 位的steady_clock::rep,即使底层的滴答计数器是 16 位。 steady_clock::rep 的位长不是强制要求的,只是要求它永远不会减少。
    • @KnowItAllWannabe - 如果允许它在一定时间后不正确运行,它就不是一个稳定的时钟。
    猜你喜欢
    • 2015-10-11
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多