我用MFC中的定时器Timer程序可以正常运行,但是换成多媒体定时器后,运行2分钟,3分钟后就死机?

时间:2021-10-27 23:35:43
TimerID=timeSetEvent(48,1,&TimerCallBack,(DWORD)this,1);

void CALLBACK CDlg::TimerCallBack(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
{
  CDlg_UDP * pThis=(CDlg_UDP*)dwUser;//由this指针获得实例的指针
  pThis->OnTimer(1);//这儿直接调用的Timer消息处理中的OnTimer函数
}


一共,就改了这么点东西,哪位高手指点一下,可能是哪方面的问题

4 个解决方案

#1


该回复于2012-07-09 09:08:37被版主删除

#2


改成这个样子试试:
void CALLBACK CDlg::TimerCallBack(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
{
   if( m_ReEntry )
       {
        m_ReEntry = true;
        CDlg_UDP * pThis=(CDlg_UDP*)dwUser;//由this指针获得实例的指针
          pThis->OnTimer(1);//这儿直接调用的Timer消息处理中的OnTimer函数
          m_ReEntry = false;
        }
}
m_ReEntry 为重入标记,初始值为false

#3


另外,为了避免因为处理程序时间过长,比较好的办法是使用Event,这样可以保证time的处理程序尽快结束

#4


引用 3 楼  的回复:
另外,为了避免因为处理程序时间过长,比较好的办法是使用Event,这样可以保证time的处理程序尽快结束

timeSetEvent,有这样的例子吗?

#1


该回复于2012-07-09 09:08:37被版主删除

#2


改成这个样子试试:
void CALLBACK CDlg::TimerCallBack(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
{
   if( m_ReEntry )
       {
        m_ReEntry = true;
        CDlg_UDP * pThis=(CDlg_UDP*)dwUser;//由this指针获得实例的指针
          pThis->OnTimer(1);//这儿直接调用的Timer消息处理中的OnTimer函数
          m_ReEntry = false;
        }
}
m_ReEntry 为重入标记,初始值为false

#3


另外,为了避免因为处理程序时间过长,比较好的办法是使用Event,这样可以保证time的处理程序尽快结束

#4


引用 3 楼  的回复:
另外,为了避免因为处理程序时间过长,比较好的办法是使用Event,这样可以保证time的处理程序尽快结束

timeSetEvent,有这样的例子吗?