Timehelp类 运行时间计算

来源:互联网 发布:网络对战射击游戏 编辑:程序博客网 时间:2024/06/06 08:46
/*#ifdef TIMEFLAG_CLOCK_T#include <time.h>#define DECLARETIMESTATISTICS clock_t timeOneInstance_Begin,timeOneInstance_End;#define CLOCKBEGIN            timeOneInstance_Begin = clock();#define CLOCKEND              timeOneInstance_End   = clock();#define DURTIME               ((double)((timeOneInstance_End-timeOneInstance_Begin)*1.0/CLOCKS_PER_SEC))#elif defined(TIMEFLAG_GETTICKCOUNT)#include <windows.h>#define DECLARETIMESTATISTICS DWORD timeOneInstance_Begin,timeOneInstance_End;#define CLOCKBEGIN            timeOneInstance_Begin = GetTickCount();#define CLOCKEND              timeOneInstance_End   = GetTickCount();#define DURTIME               ((DWORD)(timeOneInstance_End-timeOneInstance_Begin))#elif defined(TIMEFLAG_QUERYPERFORMANCECOUNTER)#include <windows.h>#define DECLARETIMESTATISTICS LARGE_INTEGER timeOneInstance_Begin,timeOneInstance_End,timeFrequency;#define CLOCKBEGIN            QueryPerformanceCounter(&timeOneInstance_Begin);#define CLOCKEND              QueryPerformanceCounter(&timeOneInstance_End);QueryPerformanceFrequency(&timeFrequency);#define DURTIME               ((double)((timeOneInstance_End.QuadPart-timeOneInstance_Begin.QuadPart)*1.0/timeFrequency.QuadPart))#else#error No TimeFlag Defined!#endif*/#pragma once#include <time.h>#include <windows.h>class CHelpTime{public:enum TIMEFLAG{TIMEFLAG_CLOCK_T,TIMEFLAG_GETTICKCOUNT,TIMEFLAG_QUERYPERFORMANCECOUNTER};public:CHelpTime(TIMEFLAG eTimeFlag){ m_pBeginTime = m_pEndTime = NULL;ChangeFlag(eTimeFlag);}~CHelpTime(){ReleaseMemory();}void ChangeFlag(TIMEFLAG eNewFlag){m_curFlag = eNewFlag;ReleaseMemory();switch(m_curFlag){case TIMEFLAG_CLOCK_T:m_pBeginTime = new clock_t(0);m_pEndTime   = new clock_t(0);break;case TIMEFLAG_GETTICKCOUNT:m_pBeginTime = new DWORD(0);m_pEndTime   = new DWORD(0);break;case TIMEFLAG_QUERYPERFORMANCECOUNTER:m_pBeginTime = new LARGE_INTEGER();m_pEndTime   = new LARGE_INTEGER();break;}};void ClockBegin(){if (!CheckValid()){return;}switch(m_curFlag){case TIMEFLAG_CLOCK_T:*(clock_t *)m_pBeginTime = clock();break;case TIMEFLAG_GETTICKCOUNT:*(DWORD *)m_pBeginTime = GetTickCount();break;case TIMEFLAG_QUERYPERFORMANCECOUNTER:QueryPerformanceCounter((LARGE_INTEGER *)m_pBeginTime);break;default:break;}}void ClockEnd(){if (!CheckValid()){return;}switch(m_curFlag){case TIMEFLAG_CLOCK_T:*(clock_t *)m_pEndTime = clock();break;case TIMEFLAG_GETTICKCOUNT:*(DWORD *)m_pEndTime = GetTickCount();break;case TIMEFLAG_QUERYPERFORMANCECOUNTER:QueryPerformanceCounter((LARGE_INTEGER *)m_pEndTime);break;default:break;}}double GetTaskTime(){if (!CheckValid()){return NULL;}double dResult = 0;switch(m_curFlag){case TIMEFLAG_CLOCK_T:dResult = ((double)((*(clock_t*)m_pEndTime-*(clock_t*)m_pBeginTime)*1.0/CLOCKS_PER_SEC));break;case TIMEFLAG_GETTICKCOUNT:dResult = ((double)(*(DWORD*)m_pEndTime-*(DWORD*)m_pBeginTime));dResult /= 1000;break;case TIMEFLAG_QUERYPERFORMANCECOUNTER:LARGE_INTEGER liFreq;QueryPerformanceFrequency(&liFreq);dResult = ((double)(((*(LARGE_INTEGER *)m_pEndTime).QuadPart-(*(LARGE_INTEGER *)m_pBeginTime).QuadPart) \                             *1.0/liFreq.QuadPart));break;}return dResult;}protected:bool CheckValid(){if (m_pBeginTime && m_pEndTime){return true;}return false;}void ReleaseMemory(){if (m_pBeginTime){delete m_pBeginTime;m_pBeginTime = NULL;}if (m_pEndTime){delete m_pEndTime;m_pEndTime = NULL;}}private:TIMEFLAG m_curFlag;void *   m_pBeginTime;void *   m_pEndTime;};

0 0