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
#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
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
timeSetEvent,有这样的例子吗?
#1
#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
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
timeSetEvent,有这样的例子吗?