1. Pause()/Resume() implemented for wxMSW

2. crash on startup in the sample corrected


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1267 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
1998-12-27 00:54:53 +00:00
parent f3855ef064
commit a6b0bd49c7
3 changed files with 247 additions and 128 deletions

View File

@@ -16,31 +16,40 @@
#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
THREAD_MISC_ERROR // Some other error
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 WXDLLEXPORT wxMutexInternal;
class WXDLLEXPORT wxMutex {
public:
@@ -57,6 +66,7 @@ public:
// Returns true if the mutex is locked.
bool IsLocked() const { return (m_locked > 0); }
protected:
friend class wxCondition;
@@ -64,8 +74,9 @@ protected:
wxMutexInternal *p_internal;
};
// ---------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// Condition handler.
// ----------------------------------------------------------------------------
class wxConditionInternal;
class WXDLLEXPORT wxCondition {
public:
@@ -81,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:
@@ -126,6 +139,9 @@ public:
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();
@@ -137,6 +153,7 @@ protected:
void TestDestroy();
// Exits from the current thread.
void Exit(void *status = NULL);
private:
// Entry point for the thread.
virtual void *Entry() = 0;
@@ -147,11 +164,12 @@ private:
wxThreadInternal *p_internal;
};
// ---------------------------------------------------------------------------
// Global variables
// ----------------------------------------------------------------------------
// Global functions and variables
// ----------------------------------------------------------------------------
// GUI mutex handling.
void WXDLLEXPORT wxMutexGuiEnter();
void WXDLLEXPORT wxMutexGuiLeave();
#endif
#endif // __THREADH__