假设我有一个指向这样的线程的指针
CWinThread *m_pThread = AfxBeginThread(StartThread, this, THREAD_PRIORITY_NORMAL, 0, 0);
现在在我的StartThread函数中假设我完成了所有操作并且函数返回了这样
UINT CClassThread::StartThread(LPVOID pVoid)
{
return true;
}
执行return语句时,我的m_pThread会无效吗?
答案 0 :(得分:5)
是的,它将无效,因为它将在线程的末尾被删除。但是,如果您将CWinThread::m_bAutoDelete
设置为FALSE
,则不会删除CWinThread*
。我只是用谷歌搜索答案,并在此处找到:http://msdn.microsoft.com/en-us/library/48xz4yz9(VS.80).aspx
顺便说一句,如果你使用的是pthreads(Unix线程),那么答案就是否定的。当一个线程终止时,它的句柄保持有效,直到你调用pthread_join
(等待一个线程完成,释放它,并获得它的返回值)或pthread_detach
(告诉一个线程在它完成时解除分配) )。