Win32定时器Timer

利用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

你可能感兴趣的:(Win32定时器Timer)