基于C++11的简易计时器

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43669941/article/details/90745646

该计时器可用于

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43669941/article/details/90745646