首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎样检测线程的状态 尤其是已退出的线程的状态 郁闷,该如何解决

2012-02-11 
怎样检测线程的状态 尤其是已退出的线程的状态 郁闷我创建了一个线程m_pListenThread::AfxBeginThread(Ud

怎样检测线程的状态 尤其是已退出的线程的状态 郁闷
我创建了一个线程
m_pListenThread   =   ::AfxBeginThread(Udp_Listen_Thread,this);

然后使用::GetExitCodeThread(m_pListenThread-> m_hThread,   &dwStatus)来检测线程的状态  
当线程正在运行时得到的结果是dwStatus   ==   STILL_ACTIVE
但是当线程运行结束后却出现断言错误
我觉得问题出现在m_pListenThread上   因为它保存的是一个CWinThread对象的指针   但是当线程退出后可能指针跟线程之间不再有对应关系   因此会出现问题  

请问应该怎么解决这个问题
或者在这种情况下应该怎样获得线程的状态   尤其是已经结束的线程的状态



[解决办法]
AfxBeginThread返回的CWinThread对象的下的AutoDelete默认是为TRUE值的,所以线程结束后会CloseHandle从而导致其成员变量线程句柄无效,所以会出线assert错误
正确的方法是在创建线程时设置参数将线程暂停,然后将AutoDelete值设为FALSE,然后再继续运行线程,这样在线程结束后可以通过线程句柄得到线程的返回值,不会报错,然后手动的删除CwinThread对象,其析构函数中会调用CloseHandle关闭线程的句柄.

热点排行