我程序里面设置timer每50毫秒响应一次,请问我如果在ontimer函数中用Sleep大于50时,程序会不会出现什么问题,,代码如下:
void CInvokeOnKeyDownDlg::OnBnClickedOk()
{
SetTimer(1,50,NULL);}void CInvokeOnKeyDownDlg::OnTimer(UINT_PTR nIDEvent)
{ Sleep(100);
//do something
.... CDialog::OnTimer(nIDEvent);
}

解决方案 »

  1.   

    没有什么大问题。
    只要你的OnTimer中的代码没有时间要求。
      

  2.   

    等于将SetTimer的生效时间推迟了100毫秒,
    这样做,可能不如推迟启动计时器的时间来得更合理
    因为时钟发生器的定时性,不会因为时间响应函数的延时而改变
      

  3.   

    假定//do something 需要n秒
    do something每过(n+0.1+0.05)秒执行一次时间消息是在空闲时执行的
      

  4.   

    请问在程序中如何设置多个定时器???相当于有多个OnTime()产生。
      

  5.   

    这样做的话就不会是50ms相应一次OnTimer函数了,OnTimer相当于一个中断函数,在执行中断函数是,中断源被屏蔽了,只有执行完OnTimer函数,中断才有效。
      

  6.   

    定时器是一项公用的系统资源,设置定时器相当于向系统申请了一个这样的资源,系统将定时向申请者发送WM_TIMER消息比如,用户程序将WM_TIMER映射到OnTimer(int iID)函数,意思是一有WM_TIMER消息到来,就执行一次该函数,多个定时器由参数iID识别如果要在OnTimer函数中实现阻塞(同步),需要应用相关的同步技术,比如WaitForSingleObject