- <pre class="cpp" name="code">/////////////////////////////////////////////
- //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);
- }
- };
- </pre><br>
- <pre></pre>
- <pre class="csharp" name="code">//應用 .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);
- }
- </pre>
- <p> </p>
- <pre></pre>
高精度多媒體時鐘應用類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.