/*#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;
};
Timehelp类 运行时间计算
最新推荐文章于 2022-08-25 20:00:00 发布