#ifndef __THREADH__
#define __THREADH__
-#ifdef __GNUG__
- #pragma interface "thread.h"
-#endif
-
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#include "wx/setup.h"
#if wxUSE_THREADS
+/* otherwise we get undefined references for non-thread case (KB)*/
+#ifdef __GNUG__
+ #pragma interface "thread.h"
+#endif
// Windows headers define it
#ifdef Yield
// in order to avoid any overhead under !MSW make all wxCriticalSection class
// functions inline - but this can't be done under MSW
-#ifdef __WXMSW__
+#if defined(__WXMSW__) || defined(__WXPM__)
class WXDLLEXPORT wxCriticalSectionInternal;
#define WXCRITICAL_INLINE
#else // !MSW
WXCRITICAL_INLINE ~wxCriticalSection();
// enter the section (the same as locking a mutex)
- void WXCRITICAL_INLINE Enter();
+ WXCRITICAL_INLINE void Enter();
// leave the critical section (same as unlocking a mutex)
- void WXCRITICAL_INLINE Leave();
+ WXCRITICAL_INLINE void Leave();
private:
// no assignment operator nor copy ctor
wxCriticalSection(const wxCriticalSection&);
wxCriticalSection& operator=(const wxCriticalSection&);
-#ifdef __WXMSW__
+#if defined(__WXMSW__) || defined(__WXPM__)
wxCriticalSectionInternal *m_critsect;
#else // !MSW
wxMutex m_mutex;
// 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(); }
+ bool IsPaused() const;
// called when the thread exits - in the context of this thread
//
void WXDLLEXPORT wxMutexGuiEnter();
void WXDLLEXPORT 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_LOCKER(name, cs) wxCriticalSectionLocker name(*cs)
+
#else // !wxUSE_THREADS
+#include "wx/defs.h" // for WXDLLEXPORT
+
// no thread support
inline void WXDLLEXPORT wxMutexGuiEnter() { }
inline void WXDLLEXPORT 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_LOCKER(name, cs)
+
#endif // wxUSE_THREADS
// automatically unlock GUI mutex in dtor
// implementation only until the end of file
// -----------------------------------------------------------------------------
#if wxUSE_THREADS
-#ifdef __WXMSW__
+#if defined(__WXMSW__) || defined(__WXPM__)
// 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