这行代码是使用 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;
}
代码解析
-
类构造函数
Timer()
:- 在类实例化时,构造函数将
m_last_time
初始化为当前时间。
- 在类实例化时,构造函数将
-
方法
reset()
:- 将
m_last_time
更新为当前时间。
- 将
-
方法
elapsed()
:- 计算当前时间与
m_last_time
之间的时间间隔。 - 使用
chrono::duration<double>
表示时间间隔,并返回秒数。
- 计算当前时间与
-
main()
函数:- 创建一个
Timer
对象。 - 使主线程休眠 2 秒。
- 输出从
Timer
对象创建到现在的时间间隔。
- 创建一个