删除类之前,该类的线程还没执行完而出错,要怎么解决?
时间:2011-12-06
来源:互联网
/***** * 接收的线程 *****/ UINT CSerialPort::RevThreadProc(LPVOID pParam) { CSerialPort *pDlg = (CSerialPort*) pParam; WaitForSingleObject(Overlapped.hEvent,INFINITE); if (pDlg->m_hCom==INVALID_HANDLE_VALUE ||!pDlg->m_bRun)//在这里出错,因为CSerialPort已经被删除了 { // ASSERT(0); return 0; } } typedef pair<int,CSerialPort*> IntUsbcom; CSerialPort* m_com=new CSerialPort(); typedef std::map<int,shared_ptr<CSerialPort>> MyMap; MyMap gVcom; gVcom.insert(IntUsbcom(1,m_com));当删除map里的元素CSerialPort时,CSerialPort里的线程RevThreadProc还正在关闭,当判断pDlg->m_hCom就出错了,因为CSerialPort已经被删除了,程序崩溃退出.
要怎么解决?
作者: arabicsara 发布时间: 2011-12-06
作者: pengzhixi 发布时间: 2011-12-06
作者: yujie_v 发布时间: 2011-12-06
你所删除的类对象在这个线程函数里面充当什么角色?
当一台终端的USB拔掉之后,我就要删除这个map对应的值
作者: arabicsara 发布时间: 2011-12-06
作者: dahuaixiaohuai 发布时间: 2011-12-06
作者: hnuqinhuan 发布时间: 2011-12-06
作者: yynetsdk 发布时间: 2011-12-06
作者: ziyue007 发布时间: 2011-12-06
作者: arabicsara 发布时间: 2011-12-06
作者: dahuaixiaohuai 发布时间: 2011-12-06
UINT CSerialPort::RevThreadProc(LPVOID pParam) { //CSerialPort *pDlg = (CSerialPort*) pParam; CSerialPort dlg = *(CSerialPort *) pParam; WaitForSingleObject(Overlapped.hEvent,INFINITE); if (pDlg->m_hCom==INVALID_HANDLE_VALUE ||!pDlg->m_bRun)//在这里出错,因为CSerialPort已经被删除了 { // ASSERT(0); return 0; } }
作者: joanlynnlove 发布时间: 2011-12-06
C/C++ code
UINT CSerialPort::RevThreadProc(LPVOID pParam)
{
//CSerialPort *pDlg = (CSerialPort*) pParam;
CSerialPort dlg = *(CSerialPort *) pParam;
WaitForSingleObject(Overlapped.hEvent……
我CSerialPort 也有一个抽象类,virtual int ReceiveData()=0;这样就编译不过了.我试试可行性,不过效率肯定不好了
作者: arabicsara 发布时间: 2011-12-06
作者: zzcmx2008 发布时间: 2011-12-06
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28