利用API函数SetTimer启动定时器,MSDN中原型如下:
UINT_PTR WINAPI SetTimer(
_In_opt_ HWND hWnd,
_In_ UINT_PTR nIDEvent,
_In_ UINT uElapse,
_In_opt_ TIMERPROC lpTimerFunc
);
参数说明:
1、nIDEvent:指定一个非零计时器标识符。
如果nIDEvent是唯一的,此相同值由 SetTimer返回,否则确定一个新的唯一值并返回它。
2、nElapse:以毫秒为单位指定超时值或间隔。
3、lpfnTimer指定处理WM_TIMER消息的TimerProc回调函数的地址。
如果此参数是NULLWM_TIMER 消息会在应用程序的消息队列。
回调函数不需要名为TimerProc但是,必须声明为static如下:
VOID CALLBACK TimerProc(
_In_ HWND hwnd,
_In_ UINT uMsg,
_In_ UINT_PTR idEvent,
_In_ DWORD dwTime
);
当起动定时器后,每间隔nElapse时间间隔,系统就会给应用程序发送WM_TIMER消息通常应用程序在OnTimer中响应这个消息。
当程序退出时,需要调用KillTimer删除定时器,释放系统资源。
第一个计时器设置为WM_TIMER消息发送到主框架窗口,主框架窗口的OnTimer事件处理程序处理WM_TIMER消息.
第二个计时器发送消息给回调函数每37.5秒。
OnStopTimer将通过每个计时器ID停止两个计时器
void CALLBACK CMainFrame::MyTimerProc(HWND hWnd,UINT nMsg,UINT_PTR nIDEvent,DWORD dwTime)
{
MessageBeep(0x00000030L);
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
MessageBeep(0xFFFFFFFF);
CMDIFrameWnd::OnTimer(nIDEvent);
}
void CMainFrame::OnStartTimer()
{
m_nWindowTimer = SetTimer(1, 2000, NULL);//使用WM_TIME消息响应
m_nCallbackTimer = SetTimer(2, 3750, &CMainFrame::MyTimerProc);//使用自己定义
printf("m_ncallbackTImer ID = %d"), m_nCallbackTimer);
}
void CMainFrame::OnStopTimer()//终止两个定时器
{
KillTimer(m_nWindowTimer);
KillTimer(m_nCallbackTimer);
}
MSDN:
http://msdn.microsoft.com/en-us/library/ms644906(VS.85).aspx