环境:VS2015 + mfc
背景:是这样的,因为公司需要,我引用了第三方的 ActiveX 控件 MsComm,添加变量为 m_com,用于 Rs232 通信,我写了一个线程,只要通信成功,就一直发送消息,我是没有断开连接的,当我关闭对话框的时候,出问题了,打断点调试,最后指向的是 ASSERT(m_pCtrlSite != NULL) 这里,那是因为对话框被销毁了,但是线程一直在执行,从而调用了被销毁的 m_com,导致报错。于是我将源代码修改如下:
do
{
CString str;
VARIANT vari;
if (this->m_hWnd != NULL) //-------------新增了判断条件 当前窗口句柄不为空则执行
{
str = _T("褪忆林\n");
vari = CStringToVariant(str);
m_com.put_Output(vari);
Sleep(500);
}
else //---------------条件不满足跳出循环
{
break;
}
}
while(true);
然后就不报错了,开心,啦啦啦。