![](/img/trans.png)
[英]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.