Allow wxThread::Wait() and Delete() to block, even under wxMSW.

Add "wait mode" parameter to these methods which can be used to make them
block even under wxMSW where they currently dispatch messages when called
which can be totally unexpected.

Do keep the old behaviour for compatibility however, although it will change i
3.2.

Closes #12998.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67185 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2011-03-14 11:54:32 +00:00
parent 31dcbd12ef
commit b95a7c3144
12 changed files with 111 additions and 24 deletions

View File

@@ -233,15 +233,20 @@ bool wxGUIAppTraits::DoMessageFromThreadWait()
return evtLoop->Dispatch();
}
DWORD wxGUIAppTraits::WaitForThread(WXHANDLE hThread)
DWORD wxGUIAppTraits::WaitForThread(WXHANDLE hThread, int flags)
{
// 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() )
if ( flags == wxTHREAD_WAIT_BLOCK ||
!wxIsMainThread() ||
!wxEventLoop::GetActive() )
{
// Simple blocking wait.
return DoSimpleWaitForThread(hThread);
}
return ::MsgWaitForMultipleObjects
(