【C++】std::chrono

std::chrono 学习笔记

1. 基本概念

std::chrono 是 C++ 标准库提供的日期和时间处理工具,引入自 C++11 标准。它提供了一种类型安全的方法来处理时间点和时间段,并且具有高度的可移植性和性能。

std::chrono 中,时间被分解为两个主要概念:时间点(time point)和持续时间(duration)。时间点表示时间的特定时刻,而持续时间表示时间段的长度。

2. 内部原理

std::chrono 使用模板类 std::duration 来表示持续时间,其中模板参数 Rep 表示时间的计数类型,通常是整数类型,而 Period 表示每个计数的时间单位。例如,std::chrono::duration<int, std::ratio<1, 1000>> 表示以毫秒为单位的持续时间。

时间点由 std::chrono::time_point 表示,它是持续时间和时钟类型的组合。时钟类型定义了时间点的参考点和时间流逝的规则。常见的时钟类型包括 std::chrono::system_clockstd::chrono::steady_clockstd::chrono::high_resolution_clock

3. 成员函数

std::chrono::duration

  • 构造函数duration(),构造一个默认的持续时间对象。
  • 赋值运算符operator=,将一个持续时间对象赋值给另一个。
  • 获取计数count(),返回持续时间的计数值。
  • zerozero(),返回零值的特殊持续时间对象。
  • minmin(),返回最小值的特殊持续时间对象。
  • maxmax(),返回最大值的特殊持续时间对象。

std::chrono::time_point

  • 构造函数time_point(),构造一个默认的时间点对象。
  • 赋值运算符operator=,将一个时间点对象赋值给另一个。

4. 使用技巧

获取当前时间点

auto now = std::chrono::system_clock::now();

延时执行

std::this_thread::sleep_for(std::chrono::milliseconds(100));

时间点计算

auto duration = end - start;

5. 实战案例

场景一:计时器

#include <iostream>
#include <chrono>
#include <thread>

void timer_callback() {
    std::cout << "定时器回调\n";
}

int main() {
    auto start = std::chrono::steady_clock::now();

    // 执行一些操作

    auto end = std::chrono::steady_clock::now();
    auto duration = end - start;

    std::cout << "程序运行时间: " << std::chrono::duration_cast<std::chrono::milliseconds>(duration).count() << " milliseconds\n";

    return 0;
}

场景二:定时器

#include <iostream>
#include <chrono>
#include <thread>

void timer_callback() {
    std::cout << "定时器回调\n";
}

int main() {
    // 创建定时器线程
    std::thread timer_thread([](){
        while(true) {
            std::this_thread::sleep_for(std::chrono::seconds(1));
            timer_callback();
        }
    });

    // 主线程执行其他操作
    std::this_thread::sleep_for(std::chrono::seconds(10));

    // 关闭定时器线程
    timer_thread.join();

    return 0;
}

6. 总结

std::chrono 提供了一种类型安全的方式来处理日期和时间,它是 C++11 引入的一个重要特性。通过使用持续时间和时间点,我们可以轻松地执行时间计算和操作,从而更加方便地处理时间相关的任务。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值