高精度多媒體時鐘應用類

  1. <pre class="cpp" name="code">/////////////////////////////////////////////  
  2. //High-Resolution Timer  
  3. //多媒體高精度時鐘應用類  
  4. /////////////////////////////////////////////  
  5.  
  6. #include <MMSYSTEM.H>   
  7. #pragma comment(lib, "WINMM.LIB")  
  8.   
  9. class CHighResolutionTimer  
  10. {  
  11.     typedef void (*TIMERCALLBACK)(DWORD);  
  12.   
  13. private:  
  14.     DWORD m_dwUser;  
  15.     MMRESULT m_nIDTimer;  
  16.     UINT m_uDelay;  
  17.     TIMERCALLBACK m_pfnCallback;  
  18.   
  19.     void KillTimer()  
  20.     {  
  21.         if(m_nIDTimer != NULL)  
  22.         {  
  23.             timeKillEvent(m_nIDTimer);  
  24.             m_nIDTimer = NULL;  
  25.         }  
  26.     }  
  27.   
  28. public:   
  29.     CHighResolutionTimer()  
  30.     {  
  31.         m_nIDTimer = NULL;  
  32.         m_uDelay = 0;  
  33.         m_pfnCallback = 0;  
  34.     }  
  35.   
  36.     virtual ~CHighResolutionTimer()  
  37.     {  
  38.         KillTimer();  
  39.     }  
  40.   
  41.     static void CALLBACK TimeProc(UINT uID,UINT uMsg,DWORD dwUser,DWORD dw1, DWORD dw2)  
  42.     {  
  43.         // dwUser contains ptr to Timer object        
  44.         CHighResolutionTimer * ptimer = (CHighResolutionTimer *) dwUser;  
  45.         // Call user-specified callback and pass back user specified data  
  46.         (ptimer->m_pfnCallback) (ptimer->m_dwUser);  
  47.     }  
  48.   
  49.     BOOL CreateTimer(DWORD dwUser,UINT uDelay,TIMERCALLBACK lpTimeProc)  
  50.     {  
  51.         ASSERT(dwUser);  
  52.         ASSERT(lpTimeProc);  
  53.           
  54.         m_dwUser = dwUser;  
  55.         m_pfnCallback = lpTimeProc;       
  56.         BOOL ret = FALSE;  
  57.         KillTimer();  
  58.         m_nIDTimer = timeSetEvent (uDelay, 0, TimeProc, (DWORD)this, TIME_PERIODIC | TIME_CALLBACK_FUNCTION);  
  59.   
  60.         if(m_nIDTimer != NULL)  
  61.             ret = TRUE;  
  62.         return(ret);  
  63.     }  
  64. };  
  65.   
  66. </pre><br>  
  67. <pre></pre>  
  68. <pre class="csharp" name="code">//應用 .h  
  69.   
  70.   CHighResolutionTimer mm_Timer;  
  71.   static void TimerCallback (DWORD dwUser);  
  72.   
  73. //應用 .cpp  
  74. 定時器回調  
  75. void CMy_TimerDlg::TimerCallback (DWORD dwUser)  
  76. {  
  77.     CMy_TimerDlg *pThis = (CMy_TimerDlg *)dwUser;  
  78.   
  79.     //  
  80.     static long count = 0;  
  81.     CString str;  
  82.     str.Format("%d",count++);  
  83.     pThis->GetDlgItem(IDC_BUTTON1)->SetWindowText(str);  
  84.     Beep(1000,1);  
  85. }  
  86.   
  87.   
  88.   
  89. //啓動2毫秒定時器  
  90. void CMy_TimerDlg::OnButton1()   
  91. {  
  92.     // TODO: Add your control notification handler code here  
  93.     //  
  94.     mm_Timer.CreateTimer((DWORD)this,2,TimerCallback);  
  95. }  
  96.   
  97.  </pre>  
  98. <p> </p>  
  99. <pre></pre>  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章