计时库

时间:2017-10-07 19:00:51

标签: c++ time cpu-architecture

在C ++中,我们可以使用chrono库来处理时间。而且我认为它与CPU时钟异步。我的意思是,chrono::seconds(1)是真实的1秒而不是相对于在此期间执行了多少指令。我对吗?

如果我是对的,它的工作原理是什么?在一般的现代计算机体系结构中,是否有任何定时器硬件与CPU时钟异步工作?

1 个答案:

答案 0 :(得分:4)

您的典型现代计算机有两种方式来分辨时间,这两种方式相互帮助。

  1. 通常有一个Time Stamp Counter,它只是一个特殊的寄存器,随着每个时钟周期递增。计算机也知道它自己的循环时间,因此循环计数可以转换成物理持续时间,例如纳秒。这最终是在OS提供"实时时钟"时使用的,在C ++ 11及更高版本中称为std::chrono::steady_clock

  2. 此外,现代计算机了解并参与Network Time Protocol。这实际上是一台计算机向另一台计算机询问当前UTC时间的有条理方式。计算机可以使用它来查找当前时间,然后使用其本地Time Stamp Counter将其转换为UTC时间。计算机可以每天多次使用NTP来保持其当地时间的准确性。在C ++ 11及更高版本中,可以通过std::chrono::system_clock访问它。

  3. 几十年前,个人计算机没有参与NTP,而是询问启动计算机的人员当前的时间和日期,然后使用机载TSC来保持当地时间。 / p>

    <强>更新

    请阅读下面的Peter Cordes评论,了解我所掩饰的详细信息。