我创建了一个线程
m_pListenThread = ::AfxBeginThread(Udp_Listen_Thread,this);然后使用::GetExitCodeThread(m_pListenThread->m_hThread, &dwStatus)来检测线程的状态 
当线程正在运行时得到的结果是dwStatus == STILL_ACTIVE
但是当线程运行结束后却出现断言错误
我觉得问题出现在m_pListenThread上 因为它保存的是一个CWinThread对象的指针 但是当线程退出后可能指针跟线程之间不再有对应关系 因此会出现问题 请问应该怎么解决这个问题
或者在这种情况下应该怎样获得线程的状态 尤其是已经结束的线程的状态

解决方案 »

  1.   

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