QueryPerformanceFrequency Window下的高精度计时器

来源:互联网 发布:sql语句格式化工具 编辑:程序博客网 时间:2024/05/28 15:10
#include "stdafx.h"#include <iostream>#include <windows.h>#include "AcquireExecutionTime.h"int _tmain(int argc, _TCHAR* argv[]){AcquireExecutionTime apt;if(apt.IsSupport() == false ){return -1;}for(int i=0; i< 10; i++){Sleep(100);std::cout << i << std::endl;}printf("%f milisecond\n", apt.GetTimeSpanMS(false));for(int i=0; i< 10; i++){Sleep(100);std::cout << i << std::endl;}printf("%f milisecond\n", apt.GetTimeSpanMS(false));return 0;}// .h#ifndef ACQUIRE_EXECUTION_TIME_H#define ACQUIRE_EXECUTION_TIME_H#include <windows.h>class AcquireExecutionTime{public:AcquireExecutionTime(void);~AcquireExecutionTime(void);public:double GetTimeSpanSec(bool isReset = false);double GetTimeSpanMS(bool isReset = false){ return GetTimeSpanSec(isReset) * 1000; }BOOL IsSupport() const { return m_bSupport; }protected:BOOL Reset();private:BOOLm_bSupport;LARGE_INTEGERm_lFrequency;LARGE_INTEGERm_lStartTime;};#endif//.cpp#include "AcquireExecutionTime.h"AcquireExecutionTime::AcquireExecutionTime(void){this->Reset();}AcquireExecutionTime::~AcquireExecutionTime(void){}BOOL AcquireExecutionTime::Reset(){m_bSupport = QueryPerformanceFrequency(&m_lFrequency) == 0 ? FALSE : TRUE;if (m_bSupport){ return QueryPerformanceCounter(&m_lStartTime);}return FALSE;}double AcquireExecutionTime::GetTimeSpanSec(bool isReset){if (m_bSupport){LARGE_INTEGERendTime;QueryPerformanceCounter(&endTime);double ret = (double)(endTime.QuadPart - m_lStartTime.QuadPart)/(double)m_lFrequency.QuadPart;if(isReset){this->Reset();}return ret;}return -1;}