X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ee4f8c2af9c6c5458e488db10aef7d00a89ace25..4bf78aae345c474fe75c0d9df43cf3aaeaf75d57:/include/wx/thread.h diff --git a/include/wx/thread.h b/include/wx/thread.h index 08e462a442..aa43599256 100644 --- a/include/wx/thread.h +++ b/include/wx/thread.h @@ -18,29 +18,49 @@ #include "wx/object.h" #include "wx/setup.h" - -typedef enum { - MUTEX_NO_ERROR=0, - MUTEX_DEAD_LOCK, // Mutex has been already locked by THE CALLING thread - MUTEX_BUSY // Mutex has been already locked by ONE thread +#include "wx/module.h" + +// ---------------------------------------------------------------------------- +// constants +// ---------------------------------------------------------------------------- + +typedef enum +{ + wxMUTEX_NO_ERROR = 0, + wxMUTEX_DEAD_LOCK, // Mutex has been already locked by THE CALLING thread + wxMUTEX_BUSY, // Mutex has been already locked by ONE thread + wxMUTEX_UNLOCKED, + wxMUTEX_MISC_ERROR } wxMutexError; -typedef enum { - THREAD_NO_ERROR=0, // No error - THREAD_NO_RESOURCE, // No resource left to create a new thread - THREAD_RUNNING, // The thread is already running - THREAD_NOT_RUNNING // The thread isn't running +typedef enum +{ + wxTHREAD_NO_ERROR = 0, // No error + wxTHREAD_NO_RESOURCE, // No resource left to create a new thread + wxTHREAD_RUNNING, // The thread is already running + wxTHREAD_NOT_RUNNING, // The thread isn't running + wxTHREAD_MISC_ERROR // Some other error } wxThreadError; -// defines the interval of priority. -#define WXTHREAD_MIN_PRIORITY 0 +/* defines the interval of priority. */ +#define WXTHREAD_MIN_PRIORITY 0 #define WXTHREAD_DEFAULT_PRIORITY 50 -#define WXTHREAD_MAX_PRIORITY 100 +#define WXTHREAD_MAX_PRIORITY 100 + +// ---------------------------------------------------------------------------- +// GUI mutex handling. +// ---------------------------------------------------------------------------- + +void WXDLLEXPORT wxMutexGuiEnter(); +void WXDLLEXPORT wxMutexGuiLeave(); -// --------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // Mutex handler -class wxMutexInternal; -class WXDLLEXPORT wxMutex { +// ---------------------------------------------------------------------------- + +class WXDLLEXPORT wxMutexInternal; +class WXDLLEXPORT wxMutex +{ public: // constructor & destructor wxMutex(); @@ -55,6 +75,7 @@ public: // Returns true if the mutex is locked. bool IsLocked() const { return (m_locked > 0); } + protected: friend class wxCondition; @@ -62,10 +83,13 @@ protected: wxMutexInternal *p_internal; }; -// --------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // Condition handler. +// ---------------------------------------------------------------------------- + class wxConditionInternal; -class WXDLLEXPORT wxCondition { +class WXDLLEXPORT wxCondition +{ public: // constructor & destructor wxCondition(); @@ -79,14 +103,18 @@ public: void Signal(); // Broadcasts to all "Waiters". void Broadcast(); + private: wxConditionInternal *p_internal; }; -// --------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // Thread management class +// ---------------------------------------------------------------------------- + class wxThreadInternal; -class WXDLLEXPORT wxThread { +class WXDLLEXPORT wxThread +{ public: // constructor & destructor. wxThread(); @@ -99,6 +127,12 @@ public: // Destroys the thread immediately if the defer flag isn't true. wxThreadError Destroy(); + // Pause a running thread + wxThreadError Pause(); + + // Resume a paused thread + wxThreadError Resume(); + // Switches on the defer flag. void DeferDestroy(bool on); @@ -116,16 +150,23 @@ public: // Returns true if the thread is alive. bool IsAlive() const; + // Returns true if the thread is running (not paused, not killed). + bool IsRunning() const; + // Returns true if the thread is suspended + bool IsPaused() const { return IsAlive() && !IsRunning(); } + // Returns true if the thread is the main thread (aka the GUI thread). static bool IsMain(); // Called when thread exits. virtual void OnExit(); + protected: // In case, the DIFFER flag is true, enables another thread to kill this one. void TestDestroy(); // Exits from the current thread. void Exit(void *status = NULL); + private: // Entry point for the thread. virtual void *Entry() = 0; @@ -136,10 +177,21 @@ private: wxThreadInternal *p_internal; }; -// --------------------------------------------------------------------------- -// Global variables +// ---------------------------------------------------------------------------- +// Automatic initialization +// ---------------------------------------------------------------------------- -// GUI mutex. -WXDLLEXPORT_DATA(extern wxMutex) wxMainMutex; +class wxThreadModule : public wxModule +{ + DECLARE_DYNAMIC_CLASS(wxThreadModule) + +public: + wxThreadModule() {} -#endif + virtual bool OnInit(); + virtual void OnExit(); +}; + + + +#endif // __THREADH__