Boost C++ 库

世界上最受推崇、设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

第 5 章。 Boost.Chrono 2.0.8 - Boost C++ 函数库
PrevUpHomeNext

第 5 章。 Boost.Chrono 2.0.8

Howard Hinnant

Beman Dawes

Vicente J. Botet Escriba

根据 Boost 软件许可证版本 1.0 发布。(参见随附文件 LICENSE_1_0.txt 或在 https://boost.ac.cn/LICENSE_1_0.txt 复制)

]

]

那么,时间是什么?如果没人问我,我知道;如果我必须向问我的人解释,我不知道。

-- 奥古斯丁

如何使用本文件

本文件使用以下命名和格式约定。

  • 代码使用 等宽字体,并进行语法高亮。
  • 您需要自行提供的可替换文本使用 斜体
  • 自由函数以代码字体显示,后跟 (),例如 free_function()
  • 如果名称引用类模板,则表示为:class_template<>;即,它采用代码字体,其名称后跟 <> 以表明它是一个类模板。
  • 如果名称引用类似函数的宏,则表示为:MACRO();即,它采用大写代码字体,其名称后跟 () 以表明它是一个类似函数的宏。类对象宏则不带末尾的 ()
  • 指向泛型编程意义上的概念的名称以驼峰式命名法表示。
[Note] 注意

此外,像这样的注释用于指定非必要信息,提供额外的背景或原理。

最后,您可以将以下内容添加到本文档中的任何代码片段中:

// Include all of Chrono files
#include <boost/chrono.hpp>
时间

我们每天都在与时间打交道。从出生起我们就本能地知道它。因此,我们都非常熟悉它,并认为它是一个简单的问题。在计算机程序中建模时间也应该同样简单。不幸的真相是,这种感知到的简单性只是表面现象。幸运的是,我们不需要一个极其复杂的解决方案来满足我们的大部分需求。然而,过于简单的解决方案可能危险且效率低下,并且无法适应计算机行业的演变。

Boost.Chrono 实现 C++11 中提出的新时间功能,如 N2661 - A Foundation to Sleep On 中所述。该文档为关键设计决策提供了背景和动机,并且是本文档中大量信息来源。

除了标准提案提供的时钟外,Boost.Chrono 还提供了特定的进程和线程时钟。

挂钟时间与系统和用户时间

为了使 Boost.Chrono 的计时功能更具通用性,该库提供了许多对操作系统进程时间 API 进行封装的时钟,从而允许提取进程的挂钟时间、用户 CPU 时间和系统 CPU 时间。挂钟时间是 CPU 时间和系统 CPU 时间的总和。(在类 POSIX 系统上,这依赖于 times()。在 Windows 上,则依赖于 GetProcessTimes()。)

Boost.Chrono 库提供:

标准
其他时钟

为了使计时功能更具通用性,Boost.Chrono 提供了许多对操作系统时间 API 进行封装的时钟,从而允许提取挂钟时间、用户 CPU 时间、进程花费的系统 CPU 时间。

最后,Boost.Chrono 包含 typeof 注册,用于 durationtime_point,以便在 C++03 编译器中使用模拟的 auto。

I/O

它为 durationtime_point 提供 I/O。此 I/O 使这些类型的使用更加方便。遵循“只为所用付费”的理念,此额外功能位于一个独立于 <boost/chrono/chrono.hpp> 的头文件中,即 <boost/chrono/chrono_io.hpp>。

它建立在 <boost/ratio/ratio_io.hpp> 的基础上,为 <boost/chrono.hpp> 中的类型提供可读且灵活的格式化和解析。此文本表示使用 SI 前缀(只要可能)。这使得 boost::milliseconds 可以轻松地表示为文本“milliseconds”,或者一个假设的 meter 类可以输出“millimeter”。 durationtime_point 的 I/O 可以通过新的分面进行自定义:duration_unitstime_point_units。用户可以特化这些分面,以便 chrono I/O 可以本地化。但 Boost.Chrono 不提供完整的区域设置解决方案。

system_clock::time_point 的 I/O 以 UTC 时间点的方式提出,主要参考 ISO 9899:1999(编程语言 - C)、ISO 9945:2003(信息技术 - 可移植操作系统接口 (POSIX))和 ISO 8601:2004(数据元素和交换格式 - 信息交换 - 日期和时间表示)。

舍入实用程序

用于处理时间间隔的几个简单的舍入实用程序函数。

买者自慎

操作系统提供的底层时钟受许多看似任意的策略和实现不一致性的影响。这是一个委婉的说法,意思是它们往往不可靠,而且每个操作系统甚至每个时钟都有其独特的、残酷而不寻常的不可靠形式。不要把全部赌注押在它们的准确性上,除非你已经非常熟悉操作系统到底保证了什么,而通常它保证的很少。


PrevUpHomeNext