Windows計時器是一個非常有用的編程元素,而且計時器的使用非常簡單,我們只需要一個時間間隔參數來調用SetTimer函數設置和啟動計時器,通過WM_TIMER消息的響應函數進行計時器控制,調用KillTimer函數停止計時器。
但是由于Windows是一個非實時操作系統,所以如果我們定義的時間間隔小于100ms的時候,計時器可能不會很準確。所以,對于有些時間要求比較高的情況,我們需要使用多媒體高精度計時器來完成計時,它的精度可以達到1ms。
下面結合實例詳細講述計時器和多媒體高精度計時器使用方法(完整實例可在我的CSDN資源中下載:[http://download.csdn.net/detail/margin1988/8328525](http://download.csdn.net/detail/margin1988/8328525))
⑴ ?普通計時器的使用方法:
1> 在.h文件中添加計時器和消息響應函數:
~~~
int m_time;//計數器編號
afx_msg void OnTimer(UINT_PTR nIDEvent);
~~~
2> 在.cpp文件中添加WM_TIMER的消息響應宏:
~~~
int m_count=0;//計時全局計數變量
BEGIN_MESSAGE_MAP (CPoint21Dlg, CDialog)
ON_WM_TIMER() //WM_TIMER消息響應宏
END_MESSAGE_MAP ()
~~~
3>?啟動計時器:
~~~
m_count = 0;
m_time = SetTimer(1,1000,NULL);
ASSERT (m_time != 0);
for (int i=0;i<10000;i++){
//uses up CPU cycles
}
if (::PeekMessage(&msg,NULL,0,0,PM_REMOVE)){
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
~~~
4>?計數控制:
~~~
void CPoint21Dlg::OnTimer(UINT_PTR nIDEvent){
m_count++;
}
~~~
5>?停止計時器:
~~~
KillTimer (m_time);
~~~
(2) 多媒體高精度計時器的使用方法:
1>?包含相關頭文件和庫:
~~~
#include <mmsystem.h>
#pragma comment(lib, "WINMM.LIB")
~~~
2>?設置并啟用多媒體計時器:
~~~
int m_acc=0;//全局計數變量
static UINT m_nTimerID=0;//多媒體計數器編號
//自定義配置及啟動多媒體計數器函數
void CPoint21Dlg::MultimediaTimer(){
TIMECAPS tc;
//獲得定時器分辨率
if (timeGetDevCaps(&tc, sizeof(TIMECAPS)) != TIMERR_NOERROR){
return;
}
UINT nResolution = min(max(tc.wPeriodMin, 1), tc.wPeriodMax);
UINT nInterval = 1;
if (nInterval < nResolution){
nInterval = nResolution;
}
//設置定時最小分辨率
timeBeginPeriod(nResolution);
//設置定時器
m_nTimerID = timeSetEvent (4, nResolution,
CPoint21Dlg::CallBackFuncTimer,(DWORD)this, TIME_PERIODIC);
}
~~~
3>?計數控制:
~~~
void CALLBACK CPoint21Dlg::CallBackFuncTimer(UINT wTimerID,UINT msg,DWORD dwUser,DWORD dw1,DWORD dw2){
m_acc++;
}
~~~
4>?停止多媒體計時器:
~~~
timeKillEvent (m_nTimerID);
~~~
- 前言
- VC++中自定義熱鍵及響應
- CFileDialog文件對話框
- VC++中客戶區保存為BMP圖片
- VC++讀、寫注冊表
- VC++播放音頻文件和音頻數據的方法
- VC++調用Matlab編寫的DLL(混合編程)
- VC++中文件讀、寫和其他相關操作匯總
- VC++獲取系統當前時間
- VC++按鈕控件字體設置
- VC++軟件界面風格簡單美化
- VC++中一些常用的數據類型之間的相互轉化
- VC++中截取字符串的方法
- VC++中vector矢量的使用方法及隨機相關
- VC++中結構體的定義及使用
- VC++中List Control控件的使用方法介紹
- VC++中窗口過程函數及其消息發送、響應機制介紹
- VC++中Ribbon編程架構及SDI架構多視圖切換介紹
- 串口通信基礎知識及VC++實現
- VC++中單個鍵盤按鍵的響應
- VC++中的計時器及多媒體高精度計時器
- VC++編寫DLL導出函數及其調用方法
- VC++對話框(CDialog)的全屏顯示及控件居中顯示
- VC++對話框(CDialog)添加背景圖片
- VC++圖片控件(Picture Control)顯示資源位圖(BMP)、文件位圖(BMP)、其它格式文件圖片(JPG\PNG\BMP)的方法
- VC++對Access數據庫的操作(查詢、插入、更新、刪除等)