⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.cpp

📁 cell phone source code
💻 CPP
字号:
// Timer.cpp: implementation of the CTimer class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "Timer.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CTimer::CTimer()
{
	m_uTimerID = 0;
	m_iStartCount = m_iStopCount = 0;
}

CTimer::~CTimer()
{
	if (m_uTimerID != 0) 
	{
		Stop();
	}
}

BOOL CTimer::Start(HWND hWnd, UINT uDelay, UINT uResolution, UINT fuEvent)
{
	if (timeGetDevCaps(&m_timeCaps, sizeof(TIMECAPS)) != TIMERR_NOERROR)
	{
		return FALSE;
	}

	m_hWnd = hWnd;
	m_uTimerRes = min(max(m_timeCaps.wPeriodMin, uResolution), m_timeCaps.wPeriodMax);
	timeBeginPeriod(m_uTimerRes);  

	m_uTimerID = timeSetEvent(uDelay, m_uTimerRes, TimeProc, (DWORD)m_hWnd, fuEvent);
	if (!m_uTimerID)
	{
		OutputDebugString("Timer start fail\n");
		return FALSE;
	}
	return TRUE;
}

void CTimer::Stop()
{
	if (m_uTimerID) 
	{ 
		UINT uID = m_uTimerID;
		m_uTimerID = 0;
		if (timeKillEvent(uID) != TIMERR_NOERROR)
		{
			OutputDebugString("Timer stop fail\n");
		}
		timeEndPeriod(m_uTimerRes);  
	}
}

void CALLBACK CTimer::TimeProc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2)
{
	HWND hWnd = (HWND)dwUser;
	if (IsWindow(hWnd))
	{
		::PostMessage(hWnd, WM_MM_TIMER, (WPARAM)wTimerID, 0);
	}
}

void CTimer::StartCount()
{
	m_iStartCount = timeGetTime();  
}

void CTimer::StopCountAndReport(BOOL bWithMsgBox)
{
	int iCount, iHour, iMin, iSec;

	m_iStopCount = timeGetTime();  

	iCount = m_iStopCount - m_iStartCount;
	iHour = iCount / 3600000;
	iCount -= iHour * 3600000;
	iMin = iCount / 60000;
	iCount -= iMin * 60000;
	iSec = iCount / 1000;
	iCount -= iSec * 1000;

	m_strReport.Format("The running time is: %2d:%02d:%02d.%03d", iHour, iMin, iSec, iCount);
//	m_strReport.Format("总共运行时间:%2d:%02d:%02d.%03d", iHour, iMin, iSec, iCount);
//	OutputDebugString(m_strReport);
	if (bWithMsgBox)
	{
		AfxMessageBox(m_strReport);
	}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -