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
+ MUTEX_BUSY, // Mutex has been already locked by ONE thread
+ MUTEX_UNLOCKED
} 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
+ THREAD_NOT_RUNNING, // The thread isn't running
+ THREAD_MISC_ERROR // Some other error
} wxThreadError;
// defines the interval of priority.
// ---------------------------------------------------------------------------
// Mutex handler
-class wxMutexInternal;
+class WXDLLEXPORT wxMutexInternal;
class WXDLLEXPORT wxMutex {
public:
// constructor & destructor
// 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);
// 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 the main thread (aka the GUI thread).
static bool IsMain();
// Called when thread exits.
virtual void OnExit();
+
+ // Returns the wxThread object which corresponds to the ID.
+ static wxThread *GetThreadFromID(unsigned long id);
protected:
// In case, the DIFFER flag is true, enables another thread to kill this one.
void TestDestroy();
// ---------------------------------------------------------------------------
// Global variables
-// GUI mutex.
-WXDLLEXPORT_DATA(extern wxMutex) wxMainMutex;
+// GUI mutex handling.
+void WXDLLEXPORT wxMutexGuiEnter();
+void WXDLLEXPORT wxMutexGuiLeave();
#endif