]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/thread.h
I changed wxUSE_HTML (and other related wxUSEs) to 1. wxHTML is stable enough and...
[wxWidgets.git] / include / wx / thread.h
index 39bc1dd2d49f219fe78dcc637f1eb44f1549b304..552e342f0ea5d0c62eaa40b3fa58e86b8c05ab39 100644 (file)
@@ -134,10 +134,11 @@ private:
 
 // in order to avoid any overhead under !MSW make all wxCriticalSection class
 // functions inline - but this can't be done under MSW
-#if defined(__WXMSW__)
+#if defined(__WXMSW__) || defined(__WXPM__)
     class WXDLLEXPORT wxCriticalSectionInternal;
     #define WXCRITICAL_INLINE
-#elif defined(__WXPM__)
+#elif defined(__WXMAC__)
+    class WXDLLEXPORT wxCriticalSectionInternal;
     #define WXCRITICAL_INLINE
 #else // !MSW && !PM
     #define WXCRITICAL_INLINE   inline
@@ -162,7 +163,7 @@ private:
     wxCriticalSection(const wxCriticalSection&);
     wxCriticalSection& operator=(const wxCriticalSection&);
 
-#if defined(__WXMSW__)
+#if defined(__WXMSW__) || defined(__WXPM__) || defined(__WXMAC__)
     wxCriticalSectionInternal *m_critsect;
 #else // !MSW
     wxMutex m_mutex;
@@ -177,10 +178,8 @@ private:
 class WXDLLEXPORT wxCriticalSectionLocker
 {
 public:
-    wxCriticalSectionLocker(wxCriticalSection& critsect) : m_critsect(critsect)
-        { m_critsect.Enter(); }
-    ~wxCriticalSectionLocker()
-        { m_critsect.Leave(); }
+    inline wxCriticalSectionLocker(wxCriticalSection& critsect);
+    inline ~wxCriticalSectionLocker();
 
 private:
     // no assignment operator nor copy ctor
@@ -385,7 +384,9 @@ public:
 // -----------------------------------------------------------------------------
 // implementation only until the end of file
 // -----------------------------------------------------------------------------
+
 #if wxUSE_THREADS
+
 #if defined(__WXMSW__)
     // 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
@@ -398,6 +399,18 @@ public:
     // wakes up the main thread if it's sleeping inside ::GetMessage()
     extern void WXDLLEXPORT wxWakeUpMainThread();
 
+    // return TRUE if the main thread is waiting for some other to terminate:
+    // wxApp then should block all "dangerous" messages
+    extern bool WXDLLEXPORT wxIsWaitingForThread();
+#elif defined(__WXMAC__)
+    extern void WXDLLEXPORT wxMutexGuiLeaveOrEnter();
+
+    // returns TRUE if the main thread has GUI lock
+    extern bool WXDLLEXPORT wxGuiOwnedByMainThread();
+
+    // wakes up the main thread if it's sleeping inside ::GetMessage()
+    extern void WXDLLEXPORT wxWakeUpMainThread();
+
     // return TRUE if the main thread is waiting for some other to terminate:
     // wxApp then should block all "dangerous" messages
     extern bool WXDLLEXPORT wxIsWaitingForThread();
@@ -409,9 +422,9 @@ public:
 
     // returns TRUE if the main thread has GUI lock
     extern bool WXDLLEXPORT wxGuiOwnedByMainThread();
-
-    inline wxCriticalSection::wxCriticalSection() { }
-    inline wxCriticalSection::~wxCriticalSection() { }
+    // return TRUE if the main thread is waiting for some other to terminate:
+    // wxApp then should block all "dangerous" messages
+    extern bool WXDLLEXPORT wxIsWaitingForThread();
 #else // !MSW && !PM
     // implement wxCriticalSection using mutexes
     inline wxCriticalSection::wxCriticalSection() { }
@@ -420,6 +433,14 @@ public:
     inline void wxCriticalSection::Enter() { (void)m_mutex.Lock(); }
     inline void wxCriticalSection::Leave() { (void)m_mutex.Unlock(); }
 #endif // MSW/!MSW
+
+    // we can define these inline functions now (they should be defined after
+    // wxCriticalSection::Enter/Leave)
+    inline
+    wxCriticalSectionLocker:: wxCriticalSectionLocker(wxCriticalSection& cs)
+        : m_critsect(cs) { m_critsect.Enter(); }
+    inline
+    wxCriticalSectionLocker::~wxCriticalSectionLocker() { m_critsect.Leave(); }
 #endif // wxUSE_THREADS
 
 #endif // __THREADH__