[英]Stopping a thread in Win32/MFC
我正在閱讀一些與線程相關的代碼,並找到了這段代碼:
MyThread::start()
{
//Create a thread
m_pThread = AfxBeginThread(/*some parameters*/)
//Create a duplicate handle for the created thread
m_hDuplicateHandle = DuplicateHandle(/* some more parameters*/)
}
MyThread::stop()
{
//Set some variables so that the thread comes out of its run() function
WaitForSingleObject(m_hDuplicateHandle, defaultTimeout);
CloseHandle(m_hDuplicateHandle);
}
我的問題,為什么需要重復的句柄? 我們不能直接等待原始線程句柄嗎? 它會以某種方式變得無效嗎?
AfxBeginThread 返回一個CWinThread*
並且 MFC 假定它將管理與線程關聯的句柄。
因此,為了安全地直接使用句柄,您需要復制它,否則當線程結束時 MFC 可能在調用 WaitForSingleObject 之前已經關閉了句柄。
如果您直接使用 win32 CreateThread API 那么您當然可以直接等待返回的句柄。
CWinThread 的 m_hThread 成員僅在銷毀 CWinThread object 時關閉。 如果 m_bAutoDelete 設置為 TRUE,object 將自行刪除。 該線程將在其工作線程 function 或消息循環等完成后自行刪除,請參閱_AfxThreadEntry。 句柄重復的原因是避免使用無效句柄或訪問無效的 CWinThread* 如果線程在調用 stop() 之前退出並被銷毀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.