Windows定时器

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

转载于:https://my.oschina.net/mlgb/blog/361754

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值