您的位置:首页 > 其它

高精度多媒体时钟应用类

2008-06-25 11:05 211 查看
/////////////////////////////////////////////
//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);
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: