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:
@@ -41,8 +41,14 @@ public:
|
|||||||
// false if and only if we have to exit the application
|
// false if and only if we have to exit the application
|
||||||
virtual bool DoMessageFromThreadWait() = 0;
|
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;
|
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_
|
#endif // _WX_MSW_APPTBASE_H_
|
||||||
|
@@ -227,6 +227,13 @@ bool wxGUIAppTraits::DoMessageFromThreadWait()
|
|||||||
|
|
||||||
DWORD wxGUIAppTraits::WaitForThread(WXHANDLE hThread)
|
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
|
return ::MsgWaitForMultipleObjects
|
||||||
(
|
(
|
||||||
1, // number of objects to wait for
|
1, // number of objects to wait for
|
||||||
|
@@ -35,6 +35,15 @@
|
|||||||
|
|
||||||
#include "wx/msw/private.h"
|
#include "wx/msw/private.h"
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// wxAppTraits implementation
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
WXDWORD wxAppTraits::DoSimpleWaitForThread(WXHANDLE hThread)
|
||||||
|
{
|
||||||
|
return ::WaitForSingleObject((HANDLE)hThread, INFINITE);
|
||||||
|
}
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// wxConsoleAppTraits implementation
|
// wxConsoleAppTraits implementation
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -73,6 +82,6 @@ bool wxConsoleAppTraits::DoMessageFromThreadWait()
|
|||||||
|
|
||||||
WXDWORD wxConsoleAppTraits::WaitForThread(WXHANDLE hThread)
|
WXDWORD wxConsoleAppTraits::WaitForThread(WXHANDLE hThread)
|
||||||
{
|
{
|
||||||
return ::WaitForSingleObject((HANDLE)hThread, INFINITE);
|
return DoSimpleWaitForThread(hThread);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user