2010-05-13 83 views
1

假設我有指針這樣指針線程

CWinThread *m_pThread = AfxBeginThread(StartThread, this, THREAD_PRIORITY_NORMAL, 0, 0); 

線程現在在我的StartThread功能假設我做了所有的操作和功能恢復這樣

UINT CClassThread::StartThread(LPVOID pVoid) 
{ 
    return true; 
} 

請問我的m_pThread無效什麼時候執行return語句?

+2

使用pthreads代替:) – 2010-05-13 05:28:53

回答

5

是的,它將是無效的,因爲它將被刪除在線程的末尾。但是,如果您將CWinThread::m_bAutoDelete設置爲FALSE,則不會刪除CWinThread*。我剛剛搜索了答案,並在這裏找到它:http://msdn.microsoft.com/en-us/library/48xz4yz9(VS.80).aspx

另外,如果您使用pthreads(Unix線程),答案將是否定的。當一個線程終止時,它的句柄保持有效,直到你調用pthread_join(等待一個線程完成,釋放它並獲得它的返回值)或pthread_detach(告訴線程在它完成時釋放它自己)。

+0

好吧,通過無效將它爲空或一些無效的數據。 – ckv 2010-05-13 05:22:00

+2

這將是一個野指針(無效)。 C++不會追查你的指針,並在它們變爲無效時將它們清零:-) – 2010-05-13 05:24:40

+1

即使它指向的對象被釋放,m_pThread也會保留它的值。它將成爲[晃來晃去的指針](http://en.wikipedia.org/wiki/Dangling_pointer)。 – 2010-05-13 05:25:26