don't wait for Windows messages in WaitForThread() if we don't dispatch events (should fix the bugs 1523302 and 1650795)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44345 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
e570a44b37
commit
535920ff93
@ -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_
|
||||
|
@ -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
|
||||
|
@ -35,6 +35,15 @@
|
||||
|
||||
#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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user