专业编程基础技术教程

网站首页 > 基础教程 正文

C++ chrono库中的 std::chrono::time_point

ccvgpt 2024-10-19 03:24:24 基础教程 9 ℃

在 C++11 中,chrono 库被引入来提供时间相关的支持。其中,std::chrono::time_point 是表示时间点的模板类。

std::chrono::time_point 的定义如下:

C++ chrono库中的 std::chrono::time_point

template<class Clock, class Duration = typename Clock::duration>
class time_point;

其中,Clock 表示时钟类型,Duration 表示时钟的时间单位。Clock 必须是一个满足 std::chrono::Clock 标准要求的类型,

表示当前时间。常用的时钟类型包括:

  • std::chrono::system_clock:系统时钟,表示从某个固定的时间点(如 UTC 时间 1970 年 1 月 1 日 00:00:00)以来的时间长度。它的精度通常是毫秒级别,可以用来表示当前系统时间。
  • std::chrono::steady_clock:稳定时钟,表示从某个固定的时间点(一般是程序启动时)以来经过的时间长度。它的精度通常是微秒级别,用于测量程序运行时间。
  • std::chrono::high_resolution_clock:高精度时钟,表示从某个固定的时间点(一般是系统启动时)以来经过的时间长度。它的精度比较高,可以用来测量较短的时间间隔。

Duration 表示时间长度的类型,通常是一个 std::chrono::duration 类型,例如 std::chrono::hoursstd::chrono::minutesstd::chrono::seconds 等。它指定了时间点的精度和范围,例如 std::chrono::hours 表示精度为小时,范围为 $[-2^{63}, 2^{63}-1]$。

时间点可以通过 std::chrono::time_point 类的构造函数来创建,可以用一个时钟类型的对象和一个时间长度对象来初始化时间点。例如:

auto now = std::chrono::system_clock::now();
auto tp = std::chrono::time_point<std::chrono::system_clock>(now);

这里我们首先调用 std::chrono::system_clock::now() 函数获取当前时间点,然后用它和 std::chrono::time_point<std::chrono::system_clock> 类型的模板参数一起作为参数,初始化了一个时间点 tp

示例

下面的示例中,我们使用 system_clock 创建了两个 time_point,分别表示代码的开始和结束时间。然后我们使用 - 运算符计算两个 time_point 之间的时间间隔,返回一个 duration 对象。最后,我们将时间间隔转换为微秒,并将其打印到控制台。

using namespace std::chrono;

// 创建一个 time_point 表示当前时间
auto start = system_clock::now();

// 一些代码执行

// 创建另一个 time_point 表示当前时间
auto end = system_clock::now();

// 计算执行时间
auto duration = duration_cast<microseconds>(end - start);
std::cout << "Time taken by function: " << duration.count() << " microseconds\n";

以下是一个示例代码,演示了如何使用 std::chrono::time_point 来表示时间点:

#include <iostream>
#include <chrono>

int main()
{
    // 获取当前时间点
    auto now = std::chrono::system_clock::now();

    // 将时间点转换为 time_t 类型
    auto t_c = std::chrono::system_clock::to_time_t(now);

    // 将 time_t 类型转换为 tm 结构体
    std::tm* tm_c = std::localtime(&t_c);

    // 输出当前时间
    std::cout << "Current time is: "
              << tm_c->tm_year + 1900 << '-'
              << tm_c->tm_mon + 1 << '-'
              << tm_c->tm_mday << ' '
              << tm_c->tm_hour << ':'
              << tm_c->tm_min << ':'
              << tm_c->tm_sec << std::endl;

    return 0;
}

在上面的代码中,首先使用 std::chrono::system_clock::now() 获取了当前的时间点,然后将它转换为 time_t 类型,并通过 std::localtime() 函数将其转换为 tm 结构体,以便输出当前的时间。

Tags:

最近发表
标签列表