簡體   English   中英

在 Win32/MFC 中停止線程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM