做图像处理算法时,免不了要测量函数的运行时间。以前我都是使用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.
请按任意键继续. . .