gpt4 book ai didi

c++ - MFC中如何停止主线程和等待子线程

转载 作者:太空宇宙 更新时间:2023-11-04 13:56:33 24 4
gpt4 key购买 nike

我在主线程中使用 ::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
}

可以通过CWinThread::m_hThread 成员获取使用AfxBeginThread 创建的线程的句柄。

请注意,在线程退出时同步阻塞可能会首先质疑创建线程的想法。

另外请注意,如果该线程具有 GUI,那么阻塞主线程(尤其是使用 INFINITE 参数)似乎是一个非常糟糕的主意。

编辑:您可以在处理发送的消息时进行阻塞等待。使用 MsgWaitForMultipleObjectsEx API,将 QS_SENDMESSAGE 作为 dwWakeMask。请注意,如果这不是您等待的条件,您将不得不检查唤醒条件并再次等待。

关于c++ - MFC中如何停止主线程和等待子线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21235376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com