#if wxUSE_THREADS
-// only for wxUSE_THREADS - otherwise we'd get undefined symbols
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma interface "thread.h"
-#endif
-
// Windows headers define it
#ifdef Yield
#undef Yield
public:
// lock the mutex in the ctor
wxMutexLocker(wxMutex& mutex)
- : m_isOk(FALSE), m_mutex(mutex)
+ : m_isOk(false), m_mutex(mutex)
{ m_isOk = ( m_mutex.Lock() == wxMUTEX_NO_ERROR ); }
- // returns TRUE if mutex was successfully locked in ctor
+ // returns true if mutex was successfully locked in ctor
bool IsOk() const
{ return m_isOk; }
// in order to avoid any overhead under platforms where critical sections are
// just mutexes make all wxCriticalSection class functions inline
-#if !defined(__WXMSW__)
+#if !defined(__WXMSW__) && !defined(__WXMAC__)
#define wxCRITSECT_IS_MUTEX 1
#define wxCRITSECT_INLINE inline
// finally, we need this typedef instead of declaring m_buffer directly
// because otherwise the assert mentioned above wouldn't compile with some
// compilers (notably CodeWarrior 8)
+#ifdef __WIN64__
+ typedef char wxCritSectBuffer[40];
+#else // __WIN32__
typedef char wxCritSectBuffer[24];
+#endif
union
{
unsigned long m_dummy1;
wxCritSectBuffer m_buffer;
};
+#elif defined(__WXMAC__)
+ void *m_critRegion ;
#endif // Unix&OS2/Win32
DECLARE_NO_COPY_CLASS(wxCriticalSection)
#undef wxCRITSECT_IS_MUTEX
// wxCriticalSectionLocker is the same to critical sections as wxMutexLocker is
-// to th mutexes
+// to mutexes
class WXDLLIMPEXP_BASE wxCriticalSectionLocker
{
public:
// dtor is not virtual, don't use this class polymorphically
~wxCondition();
- // return TRUE if the condition has been created successfully
+ // return true if the condition has been created successfully
bool IsOk() const;
// NB: the associated mutex MUST be locked beforehand by the calling thread
- //
+ //
// it atomically releases the lock on the associated mutex
// and starts waiting to be woken up by a Signal()/Broadcast()
// once its signaled, then it will wait until it can reacquire
wxCondError Wait();
// exactly as Wait() except that it may also return if the specified
- // timeout ellapses even if the condition hasn't been signalled: in this
- // case, the return value is FALSE, otherwise (i.e. in case of a normal
- // return) it is TRUE
- //
- // the timeeout parameter specifies a interval that needs to be waited in
- // milliseconds
+ // timeout elapses even if the condition hasn't been signalled: in this
+ // case, the return value is false, otherwise (i.e. in case of a normal
+ // return) it is true
+ //
+ // the timeout parameter specifies an interval that needs to be waited for
+ // in milliseconds
wxCondError WaitTimeout(unsigned long milliseconds);
// NB: the associated mutex may or may not be locked by the calling thread
//
// this method unblocks one thread if any are blocking on the condition.
// if no thread is blocking in Wait(), then the signal is NOT remembered
- // The thread which was blocking on Wait(), will then reacquire the lock
+ // The thread which was blocking on Wait() will then reacquire the lock
// on the associated mutex object before returning
wxCondError Signal();
//
// this method unblocks all threads if any are blocking on the condition.
// if no thread is blocking in Wait(), then the signal is NOT remembered
- // The threads which were blocking on Wait(), will then reacquire the lock
+ // The threads which were blocking on Wait() will then reacquire the lock
// on the associated mutex object before returning.
wxCondError Broadcast();
// dtor is not virtual, don't use this class polymorphically
~wxSemaphore();
- // return TRUE if the semaphore has been created successfully
+ // return true if the semaphore has been created successfully
bool IsOk() const;
// wait indefinitely, until the semaphore count goes beyond 0
wxSemaError TryWait();
// same as Wait(), but as a timeout limit, returns wxSEMA_NO_ERROR if the
- // semaphore was acquired and wxSEMA_TIMEOUT if the timeout has ellapsed
+ // semaphore was acquired and wxSEMA_TIMEOUT if the timeout has elapsed
wxSemaError WaitTimeout(unsigned long milliseconds);
// increments the semaphore count and signals one of the waiting threads
};
// ----------------------------------------------------------------------------
-// wxThread: class encpasulating a thread of execution
+// wxThread: class encapsulating a thread of execution
// ----------------------------------------------------------------------------
// there are two different kinds of threads: joinable and detached (default)
// Returns true if current thread is the main thread.
static bool IsMain();
- // Release the rest of our time slice leting the other threads run
+ // Release the rest of our time slice letting the other threads run
static void Yield();
// Sleep during the specified period of time in milliseconds
// default value (usually acceptable, but may not yield the best
// performance for this process)
//
- // Returns TRUE on success, FALSE otherwise (if not implemented, for
+ // Returns true on success, false otherwise (if not implemented, for
// example)
static bool SetConcurrency(size_t level);
ExitCode Wait();
// kills the thread without giving it any chance to clean up - should
- // not be used in normal circumstances, use Delete() instead. It is a
- // dangerous function that should only be used in the most extreme
- // cases!
+ // not be used under normal circumstances, use Delete() instead.
+ // It is a dangerous function that should only be used in the most
+ // extreme cases!
//
// The wxThread object is deleted by Kill() if the thread is
// detachable, but you still have to delete it manually for joinable
// NB: this function will not be called if the thread is Kill()ed
virtual void OnExit() { }
+ // Returns true if the thread was asked to terminate: this function should
+ // be called by the thread from time to time, otherwise the main thread
+ // will be left forever in Delete()!
+ virtual bool TestDestroy();
+
// dtor is public, but the detached threads should never be deleted - use
// Delete() instead (or leave the thread terminate by itself)
virtual ~wxThread();
protected:
- // Returns TRUE if the thread was asked to terminate: this function should
- // be called by the thread from time to time, otherwise the main thread
- // will be left forever in Delete()!
- bool TestDestroy();
-
// exits from the current thread - can be called only from this thread
void Exit(ExitCode exitcode = 0);
#if wxUSE_THREADS
-#if defined(__WXMSW__) || defined(__WXMAC__) || defined(__WXPM__) || defined(__EMX__)
+#if defined(__WXMSW__) || defined(__WXMAC__) || defined(__OS2__) || defined(__EMX__)
// 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
extern void WXDLLIMPEXP_BASE wxMutexGuiLeaveOrEnter();
- // returns TRUE if the main thread has GUI lock
+ // returns true if the main thread has GUI lock
extern bool WXDLLIMPEXP_BASE wxGuiOwnedByMainThread();
-#ifndef __WXPM__
// wakes up the main thread if it's sleeping inside ::GetMessage()
extern void WXDLLIMPEXP_BASE wxWakeUpMainThread();
-#endif // !OS/2
- // return TRUE if the main thread is waiting for some other to terminate:
+ // return true if the main thread is waiting for some other to terminate:
// wxApp then should block all "dangerous" messages
extern bool WXDLLIMPEXP_BASE wxIsWaitingForThread();
#endif // MSW, Mac, OS/2
#endif // wxUSE_THREADS
#endif // _WX_THREAD_H_
-