版权所有 © 2008 Howard Hinnant
版权所有 © 2006, 2008 Beman Dawes
版权所有 © 2009-2013 Vicente J. Botet Escriba
根据 Boost 软件许可证,版本 1.0 分发。(请参阅随附文件 LICENSE_1_0.txt 或复制于 https://boost.ac.cn/LICENSE_1_0.txt)
目录
]
]
“那么,时间是什么?如果没有人问我,我知道;如果我必须向问我的人解释,我就不知道了。”
-- 奥古斯丁
本文档使用以下命名和格式约定。
等宽 字体
并进行语法高亮显示。斜体
。()
,如 free_function()
。class_template<>
;也就是说,它采用代码字体,其名称后跟 <>
以指示它是类模板。MACRO()
;也就是说,它在代码字体中大写,其名称后跟 ()
以指示它是类似函数的宏。类似对象的宏不带尾随的 ()
。注意 | |
---|---|
此外,像这样的注释会指定提供额外背景或基本原理的非必要信息。 |
最后,您可以在 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** 库提供
duration
类管理。时间段的示例包括天、分钟
、秒
和 纳秒
,它们可以用每个单位的固定时钟滴答数来表示。所有这些时间单位都通过 duration
工具与通用接口统一。time_point
。 time_point
表示一个纪元加上或减去一个 duration
。该库未指定纪元。 time_point
与时钟 关联。system_clock
、steady_clock
和 high_resolution_clock
。时钟是 time_point
和 duration
的配对,以及一个返回表示现在 的 time_point
的函数。为了使计时工具更具通用性,**Boost.Chrono** 提供了许多时钟,它们是操作系统时间 API 的薄封装器,从而允许提取挂钟时间、用户 CPU 时间、进程花费的系统 CPU 时间,
process_real_cpu_clock
,捕获当前进程花费的挂钟 CPU 时间。process_user_cpu_clock
,捕获当前进程花费的用户 CPU 时间。process_system_cpu_clock
,捕获当前进程花费的系统 CPU 时间。process_cpu_clock
,它一起捕获实际、用户 CPU 和系统 CPU 进程时间。thread_clock
线程稳定时钟,给出当前线程花费的时间(当平台支持时)。最后,**Boost.Chrono** 包括 typeof 注册,用于 duration
和 time_point
,以便允许将模拟的 auto 与 C++03 编译器一起使用。
它为 duration
和 time_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 可以轻松地表示为文本“毫秒”,或者一个假设的米类可以打印出“毫米”。duration
和 time_point
的输入/输出可以通过新的 Facet 进行自定义:duration_units
和 time_point_units
。用户可以专门化这些 Facet,以便 chrono 的输入/输出可以本地化。然而,Boost.Chrono 并未提供完整的本地化解决方案。
system_clock::time_point
的输入/输出是根据 UTC 时间点提出的,主要遵循 ISO 9899:1999(编程语言 - C)、ISO 9945:2003(信息技术 - 可移植操作系统接口 (POSIX))和 ISO 8601:2004(数据元素和交换格式 - 信息交换 - 日期和时间的表示)的指导。
一些用于处理 duration 的简单舍入实用函数。
操作系统提供的底层时钟会受到许多看似随意的策略和实现不规范的影响。这是一种委婉的说法,它们往往不太可靠,并且每个操作系统甚至每个时钟都有其自身特殊且不寻常的不可靠形式。不要过分依赖它们的准确性,除非您已经深入了解特定操作系统所保证的内容,而这些保证通常很少。