Boost C++ 库

...世界上评价最高、设计最精巧的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

第 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> 之上,为 <code class="computeroutput"><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、Programming languages - C、ISO 9945:2003、Information Technology - Portable Operating System Interface (POSIX) 和 ISO 8601:2004、Data elements and interchange formats - Information interchange - Representation of dates and times。

四舍五入实用工具

一些用于处理时间间隔的简单四舍五入实用函数。

购买者请注意

操作系统提供的底层时钟受到许多看似任意的策略和实现不一致性的影响。这是一种礼貌的说法,意思是它们倾向于不稳定,并且每个操作系统甚至每个时钟都有其自己残酷而不寻常的不稳定形式。不要把全部赌注押在它们的准确性上,除非你已经深入了解了特定操作系统具体保证的内容,而这通常很少。


PrevUpHomeNext