Boost C++ 库

...世界上最受尊敬和专家设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

PrevUpHomeNext

第 6 章 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

目录

概述
动机
描述
用户指南
入门
教程
示例
外部资源
参考
头文件 <boost/chrono/include.hpp>
包含在 C++11 标准建议中
Chrono I/O V1
Chrono I/O V2
Chrono 取整工具
其他时钟
附录
附录:历史
附录:基本原理
附录:实现说明
附录:常见问题解答
附录:致谢
附录:未来计划

]

]

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

-- 奥古斯丁

如何使用本文档

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

  • 代码采用 等宽 字体 并进行语法高亮显示。
  • 需要您提供的可替换文本采用斜体
  • 自由函数以代码字体呈现,后跟 (),如 free_function()
  • 如果名称指的是类模板,则指定如下:class_template<>;也就是说,它采用代码字体,其名称后跟 <> 以指示它是类模板。
  • 如果名称指的是类似函数的宏,则指定如下:MACRO();也就是说,它在代码字体中大写,其名称后跟 () 以指示它是类似函数的宏。类似对象的宏不带尾随的 ()
  • 在泛型编程意义上指代概念 的名称以驼峰式大小写指定。
[Note] 注意

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

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

// 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,以便允许将模拟的 auto 与 C++03 编译器一起使用。

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 前缀。这使得 `code class="computeroutput">boost::milliseconds 可以轻松地表示为文本“毫秒”,或者一个假设的米类可以打印出“毫米”。durationtime_point 的输入/输出可以通过新的 Facet 进行自定义:duration_unitstime_point_units。用户可以专门化这些 Facet,以便 chrono 的输入/输出可以本地化。然而,Boost.Chrono 并未提供完整的本地化解决方案。

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

舍入工具

一些用于处理 duration 的简单舍入实用函数。

买者自负(Caveat Emptor)

操作系统提供的底层时钟会受到许多看似随意的策略和实现不规范的影响。这是一种委婉的说法,它们往往不太可靠,并且每个操作系统甚至每个时钟都有其自身特殊且不寻常的不可靠形式。不要过分依赖它们的准确性,除非您已经深入了解特定操作系统所保证的内容,而这些保证通常很少。


PrevUpHomeNext