chrono

  1. 时长类型
  2. std::chrono::duration:表示时间段。例如,std::chrono::duration<int> 表示基于整数的时间段,而 std::chrono::duration<double> 表示基于浮点数的时间段。
  3. std::chrono::hoursstd::chrono::minutesstd::chrono::secondsstd::chrono::millisecondsstd::chrono::microsecondsstd::chrono::nanoseconds:具有不同单位的特定时长类型。

  4. 时间点类型

  5. std::chrono::time_point:表示时间点。它在时钟类型和时长类型上进行模板化。
  6. std::chrono::system_clockstd::chrono::steady_clockstd::chrono::high_resolution_clock<chrono> 提供的时钟类型。

  7. 时钟函数

  8. std::chrono::duration_cast:将一个时长转换为具有不同刻度的另一个时长。
  9. std::chrono::time_point_cast:将一个时间点转换为具有不同时钟的另一个时间点。
  10. std::chrono::system_clock::now():根据系统时钟获取当前时间。
  11. std::chrono::steady_clock::now():根据稳定时钟(单调时钟)获取当前时间。
  12. std::chrono::high_resolution_clock::now():如果可用,根据高分辨率时钟获取当前时间。

  13. 实用函数

  14. std::chrono::duration_values:提供时长类型的最小值和最大值。
  15. std::chrono::time_point::min()std::chrono::time_point::max():返回时间点类型的最小值和最大值。

  16. 算术运算

  17. 时长类型支持算术运算,如加法(operator+)、减法(operator-)、乘法(operator*)、除法(operator/)以及比较运算(operator==operator!=operator< 等)。

  18. 时长字面值

  19. 可以使用字面值后缀,如 hminsmsusns 来创建时长字面值。例如,5s 表示 5 秒。

这里是一个简单的示例,演示了这些功能:

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;

    // 定义时长
    auto 秒 = seconds(10);
    auto 毫秒 = 5ms;

    // 添加时长
    auto 总时长 = 秒 + 毫秒;

    // 获取当前时间点
    auto 开始 = steady_clock::now();

    // 等待 2 秒
    std::this_thread::sleep_for(2s);

    // 计算经过的时间
    auto 结束 = steady_clock::now();
    auto 经过时间 = duration_cast<seconds>(结束 - 开始);

    std::cout << "总时长:" << 总时长.count() << " 毫秒\n";
    std::cout << "经过时间:" << 经过时间.count() << " 秒\n";

    return 0;
}