定时器的使用:分为有句柄 无句柄两类
有句柄情况下的使用:
头文件:
1、添加映射
BEGIN_MSG_MAP(类名)
MESSAGE_HANDLER(WM_TIMER, OnTimer)
END_MSG_MAP()
2、函数声明
LRESULT OnTimer(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
3、使用:
在需要开启定时器的地方SetTimer(1, 10); 参数1 定时器ID;参数2 延时时间(毫秒)
LRESULT CJUKI_ElementForm_Center::OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
int nTimerID = (int)wParam;
switch(nTimerID)
{
case 1:
KillTimer(1); //结束定时器
break;
}
}
无句柄情况下使用:
头文件声明:
static void TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime) ; //用定时器
定义:
void CInfraredDetec::TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
{
switch(nTimerid)
{
case m_uTimerID: //开启定时器时候的 ID;有多个定时器的时候需要用case
if (条件成立)
{
//结束定时器
::KillTimer(NULL,nTimerid);
}
break;
default:
break;
}
}
使用:
int m_uTimerID = ::SetTimer(NULL,100,10,(TIMERPROC)TimerProc); //10ms触发一次
MSG msg;
while (1)
{
GetMessage(&msg, NULL, 0, 0);
DispatchMessage(&msg);
}