X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5a0b749487c882a626c4eb732067a0bb400ec0f8..7af0846427683d08c44b5d88f39c932ace31843c:/include/wx/thread.h diff --git a/include/wx/thread.h b/include/wx/thread.h index 319f17c75d..24046e1d5a 100644 --- a/include/wx/thread.h +++ b/include/wx/thread.h @@ -114,10 +114,10 @@ enum wxMutexType }; // forward declarations -class WXDLLEXPORT wxConditionInternal; -class WXDLLEXPORT wxMutexInternal; -class WXDLLEXPORT wxSemaphoreInternal; -class WXDLLEXPORT wxThreadInternal; +class WXDLLIMPEXP_BASE wxConditionInternal; +class WXDLLIMPEXP_BASE wxMutexInternal; +class WXDLLIMPEXP_BASE wxSemaphoreInternal; +class WXDLLIMPEXP_BASE wxThreadInternal; // ---------------------------------------------------------------------------- // A mutex object is a synchronization object whose state is set to signaled @@ -128,7 +128,7 @@ class WXDLLEXPORT wxThreadInternal; // you should consider wxMutexLocker whenever possible instead of directly // working with wxMutex class - it is safer -class WXDLLEXPORT wxMutex +class WXDLLIMPEXP_BASE wxMutex { public: // constructor & destructor @@ -171,7 +171,7 @@ protected: // a helper class which locks the mutex in the ctor and unlocks it in the dtor: // this ensures that mutex is always unlocked, even if the function returns or // throws an exception before it reaches the end -class WXDLLEXPORT wxMutexLocker +class WXDLLIMPEXP_BASE wxMutexLocker { public: // lock the mutex in the ctor @@ -220,7 +220,7 @@ private: // you should consider wxCriticalSectionLocker whenever possible instead of // directly working with wxCriticalSection class - it is safer -class WXDLLEXPORT wxCriticalSection +class WXDLLIMPEXP_BASE wxCriticalSection { public: // ctor & dtor @@ -277,7 +277,7 @@ private: // wxCriticalSectionLocker is the same to critical sections as wxMutexLocker is // to th mutexes -class WXDLLEXPORT wxCriticalSectionLocker +class WXDLLIMPEXP_BASE wxCriticalSectionLocker { public: wxCriticalSectionLocker(wxCriticalSection& cs) @@ -302,7 +302,7 @@ private: // thread(s) to wait until some condition is fulfilled // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxCondition +class WXDLLIMPEXP_BASE wxCondition { public: // Each wxCondition object is associated with a (single) wxMutex object. @@ -364,7 +364,7 @@ private: // a shared resource // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxSemaphore +class WXDLLIMPEXP_BASE wxSemaphore { public: // specifying a maxcount of 0 actually makes wxSemaphore behave as if there @@ -419,7 +419,7 @@ private: typedef unsigned long wxThreadIdType; #endif -class WXDLLEXPORT wxThread +class WXDLLIMPEXP_BASE wxThread { public: // the return type for the thread function @@ -586,29 +586,38 @@ private: // ---------------------------------------------------------------------------- // GUI mutex handling. -void WXDLLEXPORT wxMutexGuiEnter(); -void WXDLLEXPORT wxMutexGuiLeave(); +void WXDLLIMPEXP_BASE wxMutexGuiEnter(); +void WXDLLIMPEXP_BASE wxMutexGuiLeave(); // macros for entering/leaving critical sections which may be used without // having to take them inside "#if wxUSE_THREADS" #define wxENTER_CRIT_SECT(cs) (cs).Enter() #define wxLEAVE_CRIT_SECT(cs) (cs).Leave() #define wxCRIT_SECT_DECLARE(cs) static wxCriticalSection cs +#define wxCRIT_SECT_DECLARE_MEMBER(cs) wxCriticalSection cs #define wxCRIT_SECT_LOCKER(name, cs) wxCriticalSectionLocker name(cs) +// function for checking if we're in the main thread which may be used whether +// wxUSE_THREADS is 0 or 1 +inline bool wxIsMainThread() { return wxThread::IsMain(); } + #else // !wxUSE_THREADS // no thread support -inline void WXDLLEXPORT wxMutexGuiEnter() { } -inline void WXDLLEXPORT wxMutexGuiLeave() { } +inline void WXDLLIMPEXP_BASE wxMutexGuiEnter() { } +inline void WXDLLIMPEXP_BASE wxMutexGuiLeave() { } // macros for entering/leaving critical sections which may be used without // having to take them inside "#if wxUSE_THREADS" #define wxENTER_CRIT_SECT(cs) #define wxLEAVE_CRIT_SECT(cs) #define wxCRIT_SECT_DECLARE(cs) +#define wxCRIT_SECT_DECLARE_MEMBER(cs) #define wxCRIT_SECT_LOCKER(name, cs) +// if there is only one thread, it is always the main one +inline bool wxIsMainThread() { return true; } + #endif // wxUSE_THREADS/!wxUSE_THREADS // mark part of code as being a critical section: this macro declares a @@ -633,7 +642,7 @@ inline void WXDLLEXPORT wxMutexGuiLeave() { } wxCRIT_SECT_LOCKER(cs##name##Locker, s_cs##name) // automatically lock GUI mutex in ctor and unlock it in dtor -class WXDLLEXPORT wxMutexGuiLocker +class WXDLLIMPEXP_BASE wxMutexGuiLocker { public: wxMutexGuiLocker() { wxMutexGuiEnter(); } @@ -650,19 +659,19 @@ public: // 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 - extern void WXDLLEXPORT wxMutexGuiLeaveOrEnter(); + extern void WXDLLIMPEXP_BASE wxMutexGuiLeaveOrEnter(); // returns TRUE if the main thread has GUI lock - extern bool WXDLLEXPORT wxGuiOwnedByMainThread(); + extern bool WXDLLIMPEXP_BASE wxGuiOwnedByMainThread(); #ifndef __WXPM__ // wakes up the main thread if it's sleeping inside ::GetMessage() - extern void WXDLLEXPORT wxWakeUpMainThread(); + 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 - extern bool WXDLLEXPORT wxIsWaitingForThread(); + extern bool WXDLLIMPEXP_BASE wxIsWaitingForThread(); #endif // MSW, Mac, OS/2 #endif // wxUSE_THREADS