C++ Chrono

2024 年 8 月 28 日 | 3 分钟阅读

Chrono 是一个 C++ 头文件,包含一组与时间相关的类和方法。它是 C++ 标准模板库 (STL) 的一部分,包含在 C++11 以及后续版本中。

<Chrono> 支持三种时钟:system_clock、steady_clockhigh_resolution_clock。这些时钟用于以各种方式测量时间。

  • system_clock 是系统范围的实时挂钟。它受系统时间调整的影响。
  • steady_clock 代表一个单调增长的时钟,不受系统时间修改的影响。
  • high_resolution_clock 是系统内部具有最小滴答周期的时钟。

<chrono> 包含各种持续时间类型,例如 duration <Rep, Period>,可用于描述一个时间段。Rep 是表示类型(例如 intlong),而 Period 是时间比率(例如微秒或秒)。

此外,<chrono> 包含一组时间点类型,例如 time_pointClock, Duration>,可用于描述一个时间点。Clock 是时钟类型(例如 system_clock),Duration 是时间段类型(例如秒)。

Chrono 库用于管理日期和时间。创建此库是为了应对计时器和时钟在不同系统之间可能存在的差异,以提高时间精度。chrono 的独特之处在于,它通过将持续时间 (duration) 和时间点 (time_point) 与各个时钟解耦,提供了一个与精度无关的概念。chrono 这个名称既指头文件,也指子命名空间:除了 common_type 特化,此头文件中的所有组件都已在 std::chrono 命名空间而不是 std 命名空间 中定义(与大多数标准库的情况一样)。此头文件的元素与时间有关。它主要通过使用三个概念来实现。

持续时间

持续时间 (duration) 对象使用计数(例如一分钟、两小时或十毫秒)表示一个时间段。例如,“48秒” 可以表示为 1 秒时间单位内的 48 个滴答。

文件名:Duration_count.c

输出

The duration (in periods): 60000 the time in milliseconds.
The duration (in seconds): 60 seconds.

时钟

时钟 (clock) 包含一个起始点(纪元)和一个滴答率。例如,一个时钟的纪元可以是 1997 年 2 月 22 日,每秒滴答一次。C++ 定义了三种类型的时钟

  • system_clock- 它是系统当前的时间(我们在系统工具栏上看到的普通时钟)。语法是 std::chrono::system_clock
  • steady_clock- 这是一个静态时钟,永远不会改变。它以稳定的速度移动。语法是 std::chrono::steady_clock
  • high_resolution_clock- 它具有可能的最短滴答周期。其格式为-std::chrono::high_resolution_clock

时间点

时间点 (time_point) 对象表示相对于时钟纪元的一个时间点。在内部,该对象维护一个持续时间类型的对象,该对象引用 Clock 类型。

文件名:Systemclock.c

输出

f(45) = 1134903170
The finished computation is at Mon Oct 9 16:15:36 2023
The elapsed time is 9.89949s

需要注意的是,<chrono> 提供的时钟和持续时间的精度和准确性可能因系统和平台而异;因此,请查看您的平台规格以获取更多信息。