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 ( flags == wxTHREAD_WAIT_BLOCK || !wxIsMainThread() || !wxEventLoop::GetActive() ) { // Simple blocking wait. return DoSimpleWaitForThread(hThread); } return ::MsgWaitForMultipleObjects ( 1, // number of objects to wait for (HANDLE *)&hThread, // the objects false, // wait for any objects, not all INFINITE, // no timeout QS_ALLINPUT | // return as soon as there are any events QS_ALLPOSTMESSAGE ); }
WXDWORD 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 ( flags == wxTHREAD_WAIT_YIELD && wxIsMainThread() ) { wxMSWEventLoopBase* const evtLoop = static_cast<wxMSWEventLoopBase *>(wxEventLoop::GetActive()); if ( evtLoop ) return evtLoop->MSWWaitForThread(hThread); } // Simple blocking wait. return DoSimpleWaitForThread(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 ( 1, // number of objects to wait for (HANDLE *)&hThread, // the objects false, // wait for any objects, not all INFINITE, // no timeout QS_ALLINPUT | // return as soon as there are any events QS_ALLPOSTMESSAGE ); }