11
2008
11

高精度的计时器

写程序时有时候需要判断程序的运行性能瓶颈,就需要计时器的帮助,但是一般的计时器精度不高,只能达到毫秒级的精度,下面这个计时器是使用cpu的频率来进行计时,所以他的精度很高,封装成类之后使用也很方便。

class CCPUCounter
{
 LARGE_INTEGER m_lnStartTicks;
 LARGE_INTEGER m_lnTicksCount;
 LARGE_INTEGER m_lnIntervalTicks;
public:
 CCPUCounter(){}
 BOOL StartCount(){ return QueryPerformanceCounter(&m_lnStartTicks);}
 void StopCount()
 {
  LARGE_INTEGER lnCurrTicks; QueryPerformanceCounter(&lnCurrTicks);
  m_lnIntervalTicks.QuadPart = lnCurrTicks.QuadPart - m_lnStartTicks.QuadPart;
 }
 double GetCountTime()
 {
  LARGE_INTEGER freq; QueryPerformanceFrequency(&freq);
  return (double)(m_lnIntervalTicks.QuadPart)/(double)(freq.QuadPart);
 }
};

使用方法:

CCPUCounter c1;
c1.StartCount();
语句块
c1.StopCount();
TRACE(_T("Present %f\r\n"),c1.GetCountTime());


CCPUCounter c;
c.StartCount();

c.StopCount();
static float s7 = 0; static int n7 = 1;
s7 += c.GetCountTime()*1000;
TRACE2("ReleaseDC:%fms\t AVERAGE:%fms\n",c.GetCountTime()*1000,s7/n7++);

输出的计时单位是秒,在GetCountTime()乘以1000后即可得到精度为ms的计时器。
« 上一篇下一篇 »

相关文章:

Windows进程中的内存结构(堆和栈的区别)  (2011-3-31 23:27:45)

Windows窗口、控件和对话框  (2008-12-8 18:36:51)

怎样为XP减肥  (2008-12-1 14:28:12)

从Windows 1.0到Vista启动画面回顾  (2008-11-26 18:23:13)

25年了,Windows进步了么?  (2008-11-25 9:18:28)

你知道Windows桌面“刷新”的作用吗?   (2008-11-23 16:29:5)

Windows进程字典  (2008-10-21 23:10:23)

躲避微软的正版验证,防止XP系统黑屏  (2008-10-20 14:56:17)

用c语言写一个简单的windows程序  (2008-10-15 22:1:58)

Windows Gdi 应用-入门篇  (2008-10-14 12:44:4)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。