版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
该计时器可用于
1.判断是否达到设定的时间间隔
2.获得两个时间点的时间差
Timer.h
#ifndef _TIMER_H_
#define _TIMER_H_
#include <chrono> //C++11
class Timer {
public:
Timer();
void clear(); //重置计时器
//可用于设置并判断是否达到给定的时间间隔
void setDifTime(double t); //设置时间差
bool isTimeOut(); //时间到
//可用于计算时间差
void start(); //开始,记录此刻的时间点
void stop(); //停止,记录此刻的时间点
double count(); //计算时间差
private:
std::chrono::steady_clock::time_point begin; //记录开始时间点
std::chrono::steady_clock::time_point end; //记录结束时间点
double dif_time; //记录时间间隔
};
#endif // !_TIMER_H_
Timer.cpp
#include "Timer.h"
//默认初始化
Timer::Timer() : begin(), end(), dif_time(0.0) {}
void Timer::clear() {
begin = end;
}
void Timer::setDifTime(double t) {
dif_time = t; //设置时间段
clear(); //重置定时器
start(); //开始计时
}
bool Timer::isTimeOut() {
stop(); //暂停,以便计算时间差
if (count() >= dif_time) {
start(); //重新计时
return true;
}
return false;
}
void Timer::start() {
begin = std::chrono::steady_clock::now();
}
void Timer::stop() {
end = std::chrono::steady_clock::now();
}
double Timer::count() {
//将时间段转为毫秒
std::chrono::duration<double, std::ratio<1, 1000>> times = end - begin;
return times.count();
}
下面为测试代码
#include <iostream>
#include "Timer.h"
int main(void) {
Timer timer;
//以下测试计时功能
timer.start();
for (int i = 0; i < 1000; i++);
timer.stop();
std::cout << "1000次循环耗时" << timer.count() << "毫秒" << std::endl;
//以下测试定时功能
timer.setDifTime(0.001);
for (int i = 0; i < 1000; i++);
if (timer.isTimeOut()) {
std::cout << "1000次循环的时间超过了0.001毫秒" << std::endl;
} else {
std::cout << "1000次循环的时间未超0.001毫秒" << std::endl;
}
return 0;
}