[英]MFC: sending a msg from worker thread to the Main thread to stop the worker thread
[英]How can I stop main thread and waiting sub thread in MFC
我在主線程中使用::WaitForSingleObject(event, INFINITE)
,在子線程中,當完成子線程時,我使用::SetEvent(event)
。 但這行不通。 我想知道為什么??
等待線程退出的一種標准方法是將WaitForSingleObject
與線程的句柄一起使用,而這樣做的可靠性包括使用_beginthreadex創建線程。
HANDLE hThread = reinterpret_cast<HANDLE>( _beginthreadex( ... ) );
if ( hThread ) {
DWORD dwRet = WaitForSingleObject( hThread, INIFINITE );
if ( dwRet == WAIT_OBJECT_0 ) {
// OK
} else {
// Error
}
CloseHandle( hThread );
} else {
// Error
}
通過AfxBeginThread
創建的線程的句柄可以通過CWinThread::m_hThread
成員獲得。
請不要以為在線程退出時同步阻塞可能會首先質疑創建線程的想法。
同樣請注意,如果主線程具有GUI,則阻塞主線程(尤其是使用INFINITE
參數)似乎不是一個好主意。
編輯:您可以在處理已發送消息的同時進行阻止等待。 使用MsgWaitForMultipleObjectsEx
API,將QS_SENDMESSAGE
用作dwWakeMask
。 請注意,如果不是等待狀態,則必須再次檢查喚醒條件。
我發現了問題。 當主線程待命時,在子線程中,我調用消息並發送到主線程。 好像是死鎖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.