X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c096f614b94fc6462f6339e4aec6d0b673897e13..6619edf0ea94b6623f1c7e7875d5ca8abac23382:/include/wx/thread.h diff --git a/include/wx/thread.h b/include/wx/thread.h index 7d61023195..10c30ead59 100644 --- a/include/wx/thread.h +++ b/include/wx/thread.h @@ -22,11 +22,6 @@ #if wxUSE_THREADS -// only for wxUSE_THREADS - otherwise we'd get undefined symbols -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma interface "thread.h" -#endif - // Windows headers define it #ifdef Yield #undef Yield @@ -43,6 +38,7 @@ enum wxMutexError wxMUTEX_DEAD_LOCK, // mutex is already locked by the calling thread wxMUTEX_BUSY, // mutex is already locked by another thread wxMUTEX_UNLOCKED, // attempt to unlock a mutex which is not locked + wxMUTEX_TIMEOUT, // LockTimeout() has timed out wxMUTEX_MISC_ERROR // any other error }; @@ -114,11 +110,11 @@ enum wxMutexType }; // forward declarations -class WXDLLIMPEXP_BASE wxThreadHelper; -class WXDLLIMPEXP_BASE wxConditionInternal; -class WXDLLIMPEXP_BASE wxMutexInternal; -class WXDLLIMPEXP_BASE wxSemaphoreInternal; -class WXDLLIMPEXP_BASE wxThreadInternal; +class WXDLLIMPEXP_FWD_BASE wxThreadHelper; +class WXDLLIMPEXP_FWD_BASE wxConditionInternal; +class WXDLLIMPEXP_FWD_BASE wxMutexInternal; +class WXDLLIMPEXP_FWD_BASE wxSemaphoreInternal; +class WXDLLIMPEXP_FWD_BASE wxThreadInternal; // ---------------------------------------------------------------------------- // A mutex object is a synchronization object whose state is set to signaled @@ -154,6 +150,10 @@ public: // The caller must call Unlock() later if Lock() returned wxMUTEX_NO_ERROR. wxMutexError Lock(); + // Same as Lock() but return wxMUTEX_TIMEOUT if the mutex can't be locked + // during the given number of milliseconds + wxMutexError LockTimeout(unsigned long ms); + // Try to lock the mutex: if it is currently locked, return immediately // with an error. Otherwise the caller must call Unlock(). wxMutexError TryLock(); @@ -209,7 +209,7 @@ private: // in order to avoid any overhead under platforms where critical sections are // just mutexes make all wxCriticalSection class functions inline -#if !defined(__WXMSW__) +#if !defined(__WXMSW__) && !defined(__WXMAC__) #define wxCRITSECT_IS_MUTEX 1 #define wxCRITSECT_INLINE inline @@ -261,6 +261,8 @@ private: wxCritSectBuffer m_buffer; }; +#elif defined(__WXMAC__) + void *m_critRegion ; #endif // Unix&OS2/Win32 DECLARE_NO_COPY_CLASS(wxCriticalSection) @@ -279,7 +281,7 @@ private: #undef wxCRITSECT_IS_MUTEX // wxCriticalSectionLocker is the same to critical sections as wxMutexLocker is -// to th mutexes +// to mutexes class WXDLLIMPEXP_BASE wxCriticalSectionLocker { public: @@ -319,7 +321,7 @@ public: bool IsOk() const; // NB: the associated mutex MUST be locked beforehand by the calling thread - // + // // it atomically releases the lock on the associated mutex // and starts waiting to be woken up by a Signal()/Broadcast() // once its signaled, then it will wait until it can reacquire @@ -327,19 +329,19 @@ public: wxCondError Wait(); // exactly as Wait() except that it may also return if the specified - // timeout ellapses even if the condition hasn't been signalled: in this + // timeout elapses even if the condition hasn't been signalled: in this // case, the return value is false, otherwise (i.e. in case of a normal // return) it is true - // - // the timeeout parameter specifies a interval that needs to be waited in - // milliseconds + // + // the timeout parameter specifies an interval that needs to be waited for + // in milliseconds wxCondError WaitTimeout(unsigned long milliseconds); // NB: the associated mutex may or may not be locked by the calling thread // // this method unblocks one thread if any are blocking on the condition. // if no thread is blocking in Wait(), then the signal is NOT remembered - // The thread which was blocking on Wait(), will then reacquire the lock + // The thread which was blocking on Wait() will then reacquire the lock // on the associated mutex object before returning wxCondError Signal(); @@ -347,14 +349,15 @@ public: // // this method unblocks all threads if any are blocking on the condition. // if no thread is blocking in Wait(), then the signal is NOT remembered - // The threads which were blocking on Wait(), will then reacquire the lock + // The threads which were blocking on Wait() will then reacquire the lock // on the associated mutex object before returning. wxCondError Broadcast(); +#if WXWIN_COMPATIBILITY_2_6 // deprecated version, don't use - bool Wait(unsigned long milliseconds) - { return WaitTimeout(milliseconds) == wxCOND_NO_ERROR; } + wxDEPRECATED( bool Wait(unsigned long milliseconds) ); +#endif // WXWIN_COMPATIBILITY_2_6 private: wxConditionInternal *m_internal; @@ -362,6 +365,11 @@ private: DECLARE_NO_COPY_CLASS(wxCondition) }; +#if WXWIN_COMPATIBILITY_2_6 + inline bool wxCondition::Wait(unsigned long milliseconds) + { return WaitTimeout(milliseconds) == wxCOND_NO_ERROR; } +#endif // WXWIN_COMPATIBILITY_2_6 + // ---------------------------------------------------------------------------- // wxSemaphore: a counter limiting the number of threads concurrently accessing // a shared resource @@ -390,7 +398,7 @@ public: wxSemaError TryWait(); // same as Wait(), but as a timeout limit, returns wxSEMA_NO_ERROR if the - // semaphore was acquired and wxSEMA_TIMEOUT if the timeout has ellapsed + // semaphore was acquired and wxSEMA_TIMEOUT if the timeout has elapsed wxSemaError WaitTimeout(unsigned long milliseconds); // increments the semaphore count and signals one of the waiting threads @@ -403,7 +411,7 @@ private: }; // ---------------------------------------------------------------------------- -// wxThread: class encpasulating a thread of execution +// wxThread: class encapsulating a thread of execution // ---------------------------------------------------------------------------- // there are two different kinds of threads: joinable and detached (default) @@ -439,7 +447,7 @@ public: // Returns true if current thread is the main thread. static bool IsMain(); - // Release the rest of our time slice leting the other threads run + // Release the rest of our time slice letting the other threads run static void Yield(); // Sleep during the specified period of time in milliseconds @@ -505,9 +513,9 @@ public: ExitCode Wait(); // kills the thread without giving it any chance to clean up - should - // not be used in normal circumstances, use Delete() instead. It is a - // dangerous function that should only be used in the most extreme - // cases! + // not be used under normal circumstances, use Delete() instead. + // It is a dangerous function that should only be used in the most + // extreme cases! // // The wxThread object is deleted by Kill() if the thread is // detachable, but you still have to delete it manually for joinable @@ -685,8 +693,8 @@ inline bool wxIsMainThread() { return wxThread::IsMain(); } #else // !wxUSE_THREADS // no thread support -inline void WXDLLIMPEXP_BASE wxMutexGuiEnter() { } -inline void WXDLLIMPEXP_BASE wxMutexGuiLeave() { } +inline void wxMutexGuiEnter() { } +inline void wxMutexGuiLeave() { } // macros for entering/leaving critical sections which may be used without // having to take them inside "#if wxUSE_THREADS" @@ -736,7 +744,7 @@ public: #if wxUSE_THREADS -#if defined(__WXMSW__) || defined(__WXMAC__) || defined(__WXPM__) || defined(__EMX__) +#if defined(__WXMSW__) || defined(__WXMAC__) || defined(__OS2__) || defined(__EMX__) // unlock GUI if there are threads waiting for and lock it back when // there are no more of them - should be called periodically by the main // thread @@ -745,10 +753,8 @@ public: // returns true if the main thread has GUI lock extern bool WXDLLIMPEXP_BASE wxGuiOwnedByMainThread(); -#ifndef __WXPM__ // wakes up the main thread if it's sleeping inside ::GetMessage() extern void WXDLLIMPEXP_BASE wxWakeUpMainThread(); -#endif // !OS/2 // return true if the main thread is waiting for some other to terminate: // wxApp then should block all "dangerous" messages @@ -758,4 +764,3 @@ public: #endif // wxUSE_THREADS #endif // _WX_THREAD_H_ -