aboutsummaryrefslogtreecommitdiff
path: root/src/shared/Threading.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/Threading.h')
-rw-r--r--src/shared/Threading.h19
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