设置m_bAutoDelete
设置CWinThread成员变量m_bAutoDelete为FALSE,这样当线程中止时(进程函数返回代表进程终止)线程对象不会被撤销,因此仍然可以获得线程句柄。
CWinThread* MyThread=AfxBeginThread(MyThreadFunction , pParam , THREAD_PRIORITY_NORMAL , 0 , CREATE_SUSPENDED , NULL);
m_pThread1->m_bAutoDelete = FALSE;
m_pThread1->ResumeThread();
注意:因为线程对象在线程中止时不能自动撤销,所以必须由用户进行撤销。
if (m_pThread1 != NULL)
{
delete m_pThread1;
m_pThread1 = NULL;
}
----------------------------
如果不这么做,当需要使用进程ID时,引用可能已经被销毁的MyThread来获得时,就会发生莫名其妙的错误。
与其去解决这样的错误,不如一开始写代码就写的规范。