]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/utilsexc.cpp
fix compilation without wxUSE_STREAMS (closes #10900)
[wxWidgets.git] / src / msw / utilsexc.cpp
index 0269180d9a9b5910e5ca935dbff337f6933e6954..5d2e0b52cb8fca4b7c19ae9c46265c304f92beba 100644 (file)
@@ -38,6 +38,7 @@
 #include "wx/process.h"
 #include "wx/thread.h"
 #include "wx/apptrait.h"
+#include "wx/evtloop.h"
 #include "wx/vector.h"
 
 
@@ -899,6 +900,9 @@ long wxExecute(const wxString& cmd, int flags, wxProcess *handler)
     {
         // may be NULL or not
         data->handler = handler;
+
+        if (handler)
+            handler->SetPid(pi.dwProcessId);
     }
 
     DWORD tid;
@@ -1004,8 +1008,19 @@ long wxExecute(const wxString& cmd, int flags, wxProcess *handler)
             ::Sleep(50);
         }
 
-        // we must process messages or we'd never get wxWM_PROC_TERMINATED
-        traits->AlwaysYield();
+        // we must always process messages for our hidden window or we'd never
+        // get wxWM_PROC_TERMINATED and so this loop would never terminate
+        MSG msg;
+        ::PeekMessage(&msg, data->hWnd, 0, 0, PM_REMOVE);
+
+        // we may also need to process messages for all the other application
+        // windows
+        if ( !(flags & wxEXEC_NOEVENTS) )
+        {
+            wxEventLoopBase * const loop = wxEventLoopBase::GetActive();
+            if ( loop )
+                loop->Yield();
+        }
     }
 
     if ( !(flags & wxEXEC_NODISABLE) )