doc/notebook/docs/C++/5.chrono.md

2.5 KiB
Raw Blame History

  1. 时长类型

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

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

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

    • std::chrono::duration_values:提供时长类型的最小值和最大值。
    • std::chrono::time_point::min()std::chrono::time_point::max():返回时间点类型的最小值和最大值。
  5. 算术运算

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

    • 可以使用字面值后缀,如 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;
}