关于m_last_time = chrono::steady_clock::now();的解释

这行代码是使用 C++11 引入的 chrono 库来获取当前时间点,并将其赋值给 m_last_time 变量。具体地说,它使用了 chrono::steady_clock 类,这是一种基于计时器的时钟,适用于测量时间间隔,因为它不会受到系统时钟调整的影响。

m_last_time = chrono::steady_clock::now();
1. chrono::steady_clock

chrono::steady_clock 是 C++ 标准库中的一种时钟类型。它的特点是:

  • 单调递增:计时器不会倒退,即使系统时间被调整。
  • 适用于测量时间间隔:因为它不受系统时间调整的影响,所以特别适合用于测量时间间隔。
2. chrono::steady_clock::now()

chrono::steady_clock::now() 是一个静态成员函数,它返回一个表示当前时间点的 chrono::time_point 对象。

3. m_last_time

m_last_time 是一个变量,类型应为 chrono::time_point<chrono::steady_clock>,用于存储从 chrono::steady_clock::now() 获取的当前时间点。

使用示例

假设我们有一个类需要记录某个事件的时间戳,并计算该事件到现在的时间间隔,可以如下定义和使用:

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

class Timer {
public:
    Timer() {
        // 初始化 m_last_time 为当前时间
        m_last_time = std::chrono::steady_clock::now();
    }

    void reset() {
        // 更新 m_last_time 为当前时间
        m_last_time = std::chrono::steady_clock::now();
    }

    double elapsed() const {
        // 计算并返回从 m_last_time 到现在的时间间隔(秒)
        auto now = std::chrono::steady_clock::now();
        std::chrono::duration<double> duration = now - m_last_time;
        return duration.count();
    }

private:
    std::chrono::time_point<std::chrono::steady_clock> m_last_time;
};

int main() {
    Timer timer;

    std::cout << "Sleeping for 2 seconds...\n";
    std::this_thread::sleep_for(std::chrono::seconds(2));

    std::cout << "Elapsed time: " << timer.elapsed() << " seconds\n";
    return 0;
}

代码解析

  1. 类构造函数 Timer():

    • 在类实例化时,构造函数将 m_last_time 初始化为当前时间。
  2. 方法 reset():

    • m_last_time 更新为当前时间。
  3. 方法 elapsed():

    • 计算当前时间与 m_last_time 之间的时间间隔。
    • 使用 chrono::duration<double> 表示时间间隔,并返回秒数。
  4. main() 函数:

    • 创建一个 Timer 对象。
    • 使主线程休眠 2 秒。
    • 输出从 Timer 对象创建到现在的时间间隔。

这种方式适用于需要精确测量时间间隔的应用场景,如性能测试、事件间隔统计等。由于使用 chrono::steady_clock,确保了计时器不受系统时间调整的影响,提供了可靠的时间测量。

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值