X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/47df2b8c540f17c55464719d0da74c0b43a29515..19c35fa587f97cf83e2cb28afe76b8db85b36c9f:/src/os2/thread.cpp diff --git a/src/os2/thread.cpp b/src/os2/thread.cpp index db6ba06510..04ee638e57 100644 --- a/src/os2/thread.cpp +++ b/src/os2/thread.cpp @@ -9,6 +9,10 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// +#ifdef __GNUG__ + #pragma implementation "thread.h" +#endif + // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- @@ -30,8 +34,9 @@ #define INCL_DOSPROCESS #define INCL_ERRORS #include +#ifndef __EMX__ #include - +#endif // the possible states of the thread ("=>" shows all possible transitions from // this state) enum wxThreadState @@ -479,6 +484,9 @@ bool wxThreadInternal::Create( { SetPriority(m_nPriority); } + + m_eState = STATE_NEW; + return(TRUE); } @@ -815,6 +823,28 @@ void WXDLLEXPORT wxWakeUpMainThread() { } +void WXDLLEXPORT wxMutexGuiEnter() +{ + // this would dead lock everything... + wxASSERT_MSG( !wxThread::IsMain(), + wxT("main thread doesn't want to block in wxMutexGuiEnter()!") ); + + // the order in which we enter the critical sections here is crucial!! + + // set the flag telling to the main thread that we want to do some GUI + { + wxCriticalSectionLocker enter(*gs_pCritsectWaitingForGui); + + gs_nWaitingForGui++; + } + + wxWakeUpMainThread(); + + // now we may block here because the main thread will soon let us in + // (during the next iteration of OnIdle()) + gs_pCritsectGui->Enter(); +} + void WXDLLEXPORT wxMutexGuiLeave() { wxCriticalSectionLocker enter(*gs_pCritsectWaitingForGui);