关于单线程那些事

环境: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);

然后就不报错了,开心,啦啦啦。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值