]> git.saurik.com Git - wxWidgets.git/commitdiff
don't wait for Windows messages in WaitForThread() if we don't dispatch events (shoul...
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 2 Feb 2007 23:12:34 +0000 (23:12 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 2 Feb 2007 23:12:34 +0000 (23:12 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44345 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/apptbase.h
src/msw/app.cpp
src/msw/basemsw.cpp

index f08f50d1484c72f6d4b0dcc66bdc23685b8f5c9b..0284e348d7b4e24dced67b1d06ffc5e3675c7f91 100644 (file)
@@ -41,8 +41,14 @@ public:
     // false if and only if we have to exit the application
     virtual bool DoMessageFromThreadWait() = 0;
 
-    // wait for the handle to be signaled
+    // wait for the handle to be signaled, return WAIT_OBJECT_0 if it is or, in
+    // the GUI code, WAIT_OBJECT_0 + 1 if a Windows message arrived
     virtual WXDWORD WaitForThread(WXHANDLE hThread) = 0;
+
+protected:
+    // implementation of WaitForThread() for the console applications which is
+    // also used by the GUI code if it doesn't [yet|already} dispatch events
+    WXDWORD DoSimpleWaitForThread(WXHANDLE hThread);
 };
 
 #endif // _WX_MSW_APPTBASE_H_
index 1554e8637ed06c0fa29b069fc1cf1aff05ca7617..61218c71902647361d85cde2696201497e7cb760 100644 (file)
@@ -227,6 +227,13 @@ 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() )
+        return DoSimpleWaitForThread(hThread);
+
     return ::MsgWaitForMultipleObjects
              (
                1,                   // number of objects to wait for
index 8ec6130a51f488f8ae6de9a3cc62e3faeafc0a74..47a9aac846043e040ba842f8a8272f9bcc339d24 100644 (file)
 
 #include "wx/msw/private.h"
 
+// ============================================================================
+// wxAppTraits implementation
+// ============================================================================
+
+WXDWORD wxAppTraits::DoSimpleWaitForThread(WXHANDLE hThread)
+{
+    return ::WaitForSingleObject((HANDLE)hThread, INFINITE);
+}
+
 // ============================================================================
 // wxConsoleAppTraits implementation
 // ============================================================================
@@ -73,6 +82,6 @@ bool wxConsoleAppTraits::DoMessageFromThreadWait()
 
 WXDWORD wxConsoleAppTraits::WaitForThread(WXHANDLE hThread)
 {
-    return ::WaitForSingleObject((HANDLE)hThread, INFINITE);
+    return DoSimpleWaitForThread(hThread);
 }