码迷,mamicode.com
首页 > 编程语言 > 详细

Window中C++进行精确计时的方法

时间:2015-01-10 21:01:57      阅读:322      评论:0      收藏:0      [点我收藏+]

标签:

嗯,程序员一个永恒的追求就是性能吧?

为了衡量性能,自然需要计时。

奈何无论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++进行精确计时的方法

标签:

原文地址:http://www.cnblogs.com/Vonng/p/4215571.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!