首页 > 代码库 > Window中C++进行精确计时的方法
Window中C++进行精确计时的方法
嗯,程序员一个永恒的追求就是性能吧?
为了衡量性能,自然需要计时。
奈何无论C标准库还是C++标准库,因为通用性的考虑,其time API精度都不高。基本都是毫秒级的。
所以如果要真正精确地衡量程序的性能,还是得靠系统API。下面的计时方式可以精确到<1us。
如果不想了解什么原理,可以直接拷走下面这个简易计时器类。放在一个头文件里,用的时候Include一下就行。
#include<windows.h>class MyTimer{private: LARGE_INTEGER _freq; LARGE_INTEGER _start; LARGE_INTEGER _stop;public: MyTimer() { QueryPerformanceFrequency(&_freq); } inline void start() { QueryPerformanceCounter(&_start); } inline void stop() { QueryPerformanceCounter(&_stop); } inline double elapse() { return 1e3*(_stop.QuadPart - _start.QuadPart) / _freq.QuadPart; } inline long long ticks() { return _stop.QuadPart - _start.QuadPart; }};
使用方式也很简单: 三个API: start, stop, elapse.
//Example: MyTimer timer; timer.start(); MatrixXd m3 = m1 * m2; //Critical Code Here timer.stop(); printf("Time Elapsed: %lf\n", timer.elapse());
主要用到的系统API有如下两个。
QueryPerformanceCounter
来自 <http://msdn.microsoft.com/en-us/library/windows/desktop/ms644904(v=vs.85).aspx>
QueryPerformanceFrequency function
来自 <http://msdn.microsoft.com/en-us/library/windows/desktop/ms644905(v=vs.85).aspx>
看一下MSDN的说明即可。
Window中C++进行精确计时的方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。