]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/thread.h
Fixes to wxMotif scrolling and colours (wxTreeCtrl/wxListCtrl now seem to work
[wxWidgets.git] / include / wx / thread.h
index c4034bb68930492821777ac28e8dec6941ba2c6c..b02df5244f1e0d52dab50b6ed3484added7ccabd 100644 (file)
@@ -9,38 +9,48 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifndef _WX_THREADH__
-#define _WX_THREADH__
+#ifndef __THREADH__
+#define __THREADH__
 
 #ifdef __GNUG__
 #pragma interface "thread.h"
 #endif
 
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
 #include "wx/object.h"
 #include "wx/setup.h"
 
+// ----------------------------------------------------------------------------
+// constants
+// ----------------------------------------------------------------------------
+
 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_UNLOCKED
+  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
+  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
+#define WXTHREAD_MIN_PRIORITY     0
 #define WXTHREAD_DEFAULT_PRIORITY 50
-#define WXTHREAD_MAX_PRIORITY 100
+#define WXTHREAD_MAX_PRIORITY     100
 
-// ---------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
 // Mutex handler
-class wxMutexInternal;
+// ----------------------------------------------------------------------------
+class WXDLLEXPORT wxMutexInternal;
 class WXDLLEXPORT wxMutex {
 public:
   // constructor & destructor 
@@ -56,6 +66,7 @@ public:
 
   // Returns true if the mutex is locked.
   bool IsLocked() const { return (m_locked > 0); }
+
 protected:
   friend class wxCondition;
 
@@ -63,8 +74,9 @@ protected:
   wxMutexInternal *p_internal;
 };
 
-// ---------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
 // Condition handler.
+// ----------------------------------------------------------------------------
 class wxConditionInternal;
 class WXDLLEXPORT wxCondition {
 public:
@@ -80,12 +92,14 @@ public:
   void Signal();
   // Broadcasts to all "Waiters".
   void Broadcast();
+
 private:
   wxConditionInternal *p_internal;
 };
 
-// ---------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
 // Thread management class
+// ----------------------------------------------------------------------------
 class wxThreadInternal;
 class WXDLLEXPORT wxThread {
 public:
@@ -100,6 +114,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);
 
@@ -117,16 +137,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;
@@ -137,10 +164,12 @@ private:
   wxThreadInternal *p_internal;
 };
 
-// ---------------------------------------------------------------------------
-// Global variables
+// ----------------------------------------------------------------------------
+// Global functions and variables
+// ----------------------------------------------------------------------------
 
-// GUI mutex.
-WXDLLEXPORT_DATA(extern wxMutex) wxMainMutex;
+// GUI mutex handling.
+void WXDLLEXPORT wxMutexGuiEnter();
+void WXDLLEXPORT wxMutexGuiLeave();
 
-#endif
+#endif // __THREADH__