高精度多媒体时钟应用类

/
//High-Resolution Timer
//多媒体高精度时钟应用类
/

#include <MMSYSTEM.H> 
#pragma comment(lib, "WINMM.LIB")

class CHighResolutionTimer
{
	typedef void (*TIMERCALLBACK)(DWORD);

private:
	DWORD m_dwUser;
	MMRESULT m_nIDTimer;
	UINT m_uDelay;
	TIMERCALLBACK m_pfnCallback;

	void KillTimer()
	{
		if(m_nIDTimer != NULL)
		{
			timeKillEvent(m_nIDTimer);
			m_nIDTimer = NULL;
		}
	}

public:	
	CHighResolutionTimer()
	{
		m_nIDTimer = NULL;
		m_uDelay = 0;
		m_pfnCallback = 0;
	}

	virtual ~CHighResolutionTimer()
	{
		KillTimer();
	}

	static void CALLBACK TimeProc(UINT uID,UINT uMsg,DWORD dwUser,DWORD dw1, DWORD dw2)
	{
		// dwUser contains ptr to Timer object		
		CHighResolutionTimer * ptimer = (CHighResolutionTimer *) dwUser;
		// Call user-specified callback and pass back user specified data
		(ptimer->m_pfnCallback) (ptimer->m_dwUser);
	}

	BOOL CreateTimer(DWORD dwUser,UINT uDelay,TIMERCALLBACK lpTimeProc)
	{
		ASSERT(dwUser);
		ASSERT(lpTimeProc);
		
		m_dwUser = dwUser;
		m_pfnCallback = lpTimeProc;		
		BOOL ret = FALSE;
		KillTimer();
		m_nIDTimer = timeSetEvent (uDelay, 0, TimeProc, (DWORD)this, TIME_PERIODIC | TIME_CALLBACK_FUNCTION);

		if(m_nIDTimer != NULL)
			ret = TRUE;
		return(ret);
	}
};



//应用 .h

  CHighResolutionTimer mm_Timer;
  static void TimerCallback (DWORD dwUser);

//应用 .cpp
定时器回调
void CMy_TimerDlg::TimerCallback (DWORD dwUser)
{
	CMy_TimerDlg *pThis = (CMy_TimerDlg *)dwUser;

	//
	static long count = 0;
	CString str;
	str.Format("%d",count++);
	pThis->GetDlgItem(IDC_BUTTON1)->SetWindowText(str);
	Beep(1000,1);
}



//启动2毫秒定时器
void CMy_TimerDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	//
	mm_Timer.CreateTimer((DWORD)this,2,TimerCallback);
}

 

 


评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值