C++11高精度计时器类

rzwm

2019/10/27

Categories: C++ Tags: time

做图像处理算法时,免不了要测量函数的运行时间。以前我都是使用OpenCV的计时函数cv::getTickCount()cv::getTickFrequency(),但是这样一来,在不使用OpenCV的项目中就没法用了。

幸好C++11增加了std::chrono库,可以很方便地实现跨平台的时间测量。于是我封装了一个简单的计时器类,这样只要将其简单地保存为头文件,就可以直接包含使用了。

此类当前的计时单位为毫秒,但可以去除/ 1e3从而精确到微秒。

#include <iostream>
#include <chrono>

class Timer {
public:
	Timer()
		: t1(res::zero())
		, t2(res::zero()) {
		tic();
	}

	~Timer() {}

	void tic() {
		t1 = clock::now();
	}

	void toc(const char* str) {
		t2 = clock::now();
		std::cout << str << " time: "
			<< std::chrono::duration_cast<res>(t2 - t1).count() / 1e3 << "ms." << std::endl;
	}

private:
	typedef std::chrono::high_resolution_clock clock;
	typedef std::chrono::microseconds res;

	clock::time_point t1;
	clock::time_point t2;
};

测试代码如下:

int main() {
	Timer timer;

	std::cout << "1" << std::endl;
	timer.toc("output 1");

	timer.tic();
	std::cout << "2" << std::endl;
	timer.toc("output 2");

#ifdef _MSC_VER
	system("pause");
#endif // _MSC_VER

	return 0;
}

输出如下:

1
output 1 time: 0.26ms.
2
output 2 time: 0.039ms.
请按任意键继续. . .