这要怎么判断?
这个类对象里有五六个线程,处理了对每台终端的下载上传文件的处理,因为有几台终端,我就用了map管理;
当一台终端的USB拔掉之后,我就要删除这个map对应的值
这个类对象里有五六个线程,处理了对每台终端的下载上传文件的处理,因为有几台终端,我就用了map管理;
当一台终端的USB拔掉之后,我就要删除这个map对应的值
解决方案 »
- 如何在单文档中显示键盘上的Tap符号
- 画不规则控件的问题 急等
- CIPAddressCtrl,GetAddress()出现Debug Assertion Failed
- 在unicode模式下,怎样把字符串拷贝到剪切板?
- 关于取视图尺寸问题
- 关于NT系统调用的问题,高高手请进(有一定难度)?
- vc如何选取出sql server中精确到毫秒级的数据?难道没有办法么?
- 一个COM组件,若我只有这个DLL文件,有接口名,及方法使用的说明,客户端怎么写调用?
- 求问,为什么fread能读进图片信息头却读不进位图数据
- 感谢bensilver!!!(请跟帖!) No.2
- 错误 1 error C2065: 'IDC_VIDEO_NAME' : undeclared identifier
- 局域网下,CAB需要签名么?
设置串口的状态,串口会马上结束等待,从而可以达到快速退出线程的目的。
exitflag = TRUE;
SetCommMask( g____hComm, EV_RXCHAR | EV_TXEMPTY );线程里面
if( ReadFile( ... ... ) )
{
}
if( exitflag )
{
return 1;
}
{
if (ptRevThreadProc)
{
WaitForSingleObject(ptRevThreadProc->m_hThread,INFINITE);//偶尔会在这里出错
}
DeleteCriticalSection(&m_bRevCS);
}现在增加了在删除类之前等待线程退出,偶尔还是会出错,在WaitForSingleObject,不知道为什么这个类已经被删除了
我把智能指针去掉,自己在erase的时候delete,还是会出错
求解决方法:要在哪里等待线程退出?我写在类的析构函数里不行吗?
应该是你的对象维护逻辑上面有些问题。假如port需要被2个以上的线程同时关注,那么你在任何一个线程里面删除他都会有问题。唯一的解决办法是用引用计数来自删除。
类似这样port{
long nRef;
port(){nRef=0;}
void addRef(){interlockedincrcement(&nRef);
long release(){
if(interlockeddecricement(&nRef)==0)
{
delete this;
return 0;
}
return nRef;
}
}port对象自己维护删除自己的时机。然后需要用到她的线程addRef,不用时release掉。这样主线程只需等待所有工作线程结束,就可以安全的关闭掉port(release()掉)