]> git.saurik.com Git - wxWidgets.git/commitdiff
Don't dispatch messages while waiting in worker thread in wxMSW.
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 26 Oct 2010 15:11:06 +0000 (15:11 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 26 Oct 2010 15:11:06 +0000 (15:11 +0000)
We only want to continue dispatching messages while waiting for another thread
to terminate if we are waiting in the main thread.

Closes #12618.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65929 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/app.cpp

index 81261ce15f0aa310a5fa93e38fea6864d252a5f1..6f93301d0aaeaeb2500ec428727106e01a7d91a1 100644 (file)
@@ -235,11 +235,12 @@ bool wxGUIAppTraits::DoMessageFromThreadWait()
 
 DWORD wxGUIAppTraits::WaitForThread(WXHANDLE hThread)
 {
-    // if we don't have a running event loop, we shouldn't wait for the
-    // messages as we never remove them from the message queue and so we enter
-    // an infinite loop as MsgWaitForMultipleObjects() keeps returning
-    // WAIT_OBJECT_0 + 1
-    if ( !wxEventLoop::GetActive() )
+    // We only ever dispatch messages from the main thread and, additionally,
+    // even from the main thread we shouldn't wait for the message if we don't
+    // have a running event loop as we would never remove them from the message
+    // queue then and so we would enter an infinite loop as
+    // MsgWaitForMultipleObjects() keeps returning WAIT_OBJECT_0 + 1.
+    if ( !wxIsMainThread() || !wxEventLoop::GetActive() )
         return DoSimpleWaitForThread(hThread);
 
     return ::MsgWaitForMultipleObjects