diff options
Diffstat (limited to 'src/shared/Threading.h')
-rw-r--r-- | src/shared/Threading.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/shared/Threading.h b/src/shared/Threading.h index 36d35ff9f79..574b9641aac 100644 --- a/src/shared/Threading.h +++ b/src/shared/Threading.h @@ -15,19 +15,24 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + #ifndef THREADING_H #define THREADING_H + #include <ace/Thread.h> #include <ace/TSS_T.h> #include "ace/Atomic_Op.h" #include <assert.h> + namespace ACE_Based { + class Runnable { public: virtual ~Runnable() {} virtual void run() = 0; + void incReference() { ++m_refs; } void decReference() { @@ -37,6 +42,7 @@ namespace ACE_Based private: ACE_Atomic_Op<ACE_Thread_Mutex, int> m_refs; }; + enum Priority { Idle, @@ -47,43 +53,56 @@ namespace ACE_Based Highest, Realtime, }; + #define MAXPRIORITYNUM (Realtime + 1) + class ThreadPriority { public: ThreadPriority(); int getPriority(Priority p) const; + private: int m_priority[MAXPRIORITYNUM]; }; + class Thread { public: Thread(); explicit Thread(Runnable* instance); ~Thread(); + bool start(); bool wait(); void destroy(); + void suspend(); void resume(); + void setPriority(Priority type); + static void Sleep(unsigned long msecs); static ACE_thread_t currentId(); static ACE_hthread_t currentHandle(); static Thread * current(); + private: Thread(const Thread&); Thread& operator=(const Thread&); + static ACE_THR_FUNC_RETURN ThreadTask(void * param); + ACE_thread_t m_iThreadId; ACE_hthread_t m_hThreadHandle; Runnable * m_task; + typedef ACE_TSS<Thread> ThreadStorage; //global object - container for Thread class representation of every thread static ThreadStorage m_ThreadStorage; //use this object to determine current OS thread priority values mapped to enum Priority{} static ThreadPriority m_TpEnum; }; + } #endif |