C++11 引入的 chrono 库,用于处理时间、计时和时间点,主要提供三类核心概念。

duration(持续时间)

1
std::chrono::duration<Rep, Period>

Rep 表示持续时间的类型,Period 表示时间单位。

常用别名:

  • std::chrono::seconds
  • std::chrono::milliseconds 毫秒
  • std::chrono::microseconds 微秒
  • std::chrono::nanoseconds 纳秒
  • std::chrono::minutes 分钟
  • std::chrono::hours 小时

time_point(时间点)

表示某个具体时刻。

1
std::chrono::time_point<Clock, Duration>

Clock 表示时钟类型,Duration 表示时间间隔类型。

clock(时钟)

提供获取当前时间的函数。

  • steady_clock 单调递增,不受系统时间调整影响,适合计时。
  • system_clock 系统时间,可转换为日历时间。
  • high_resolution_clock 高精度计时。

使用

获取当前时间点

1
auto start = std::chrono::steady_clock::now();

计时

1
2
3
4
5
6
auto start = std::chrono::steady_clock::now();
// 代码片段
auto end = std::chrono::steady_clock::now();
auto duration = duration_cast<std::chrono::microseconds>(end - start);

std::cout << "Time used: " << duration.count() << " microseconds" << std::endl;

返回 epoch 到当前时间点的偏移量,并把这个时间间隔以整数形式表示

1
chrono::steady_clock::now().time_since_epoch().count(); // 常用于初始化随机数种子

不同 Clock 类型的 spoch 不一样:

  • steady_clockspoch 通常为 系统启动时间
  • system_clockspoch 通常为 1970-01-01 00:00:00 UTC