Timehelp类 运行时间计算

/*#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值