指向线程的指针

ckv*_*ckv 1 c++ mfc multithreading

假设我有一个指向这样的线程的指针

CWinThread *m_pThread = AfxBeginThread(StartThread, this, THREAD_PRIORITY_NORMAL, 0, 0);
Run Code Online (Sandbox Code Playgroud)

现在在我的StartThread函数中假设我完成了所有操作并且函数返回了这样

UINT CClassThread::StartThread(LPVOID pVoid)
{
     return true;
}
Run Code Online (Sandbox Code Playgroud)

执行return语句时,我的m_pThread会无效吗?

Joe*_*ams 5

是的,它将无效,因为它将在线程的末尾被删除.但是,如果设置CWinThread::m_bAutoDeleteFALSE,CWinThread*则不会删除.我只是用Google搜索答案并在此处找到:http: //msdn.microsoft.com/en-us/library/48xz4yz9(VS.80).aspx

顺便说一句,如果你使用的是pthreads(Unix线程),那么答案就是否定的.当一个线程终止时,它的句柄保持有效,直到你调用pthread_join(等待一个线程完成,释放它,并获得它的返回值)或pthread_detach(告诉一个线程在它完成时解除分配).

  • 它将是一个狂野指针(无效).C++不会搜索你的指针,当它们变得无效时将它们清空:-) (2认同)