00001
00002
00003
00004
00005
00006
00007
00008 #ifndef IBRCOMMON_THREAD_H_
00009 #define IBRCOMMON_THREAD_H_
00010
00011 #include <pthread.h>
00012 #include <sys/types.h>
00013
00014 namespace ibrcommon
00015 {
00026 class Thread
00027 {
00028 protected:
00029 pthread_t tid;
00030 size_t stack;
00031 int priority;
00032
00038 Thread(size_t stack = 0);
00039
00040 public:
00047 void setPriority(void);
00048
00053 static void yield(void);
00054
00059 static void sleep(size_t timeout);
00060
00064 virtual void run(void) = 0;
00065
00069 virtual ~Thread();
00070
00079 virtual void exit(void);
00080
00081
00082
00083
00084
00085
00086
00087
00092 static void concurrency(int level);
00093
00100 static bool equal(pthread_t thread1, pthread_t thread2);
00101
00106 inline static pthread_t self(void)
00107 {return pthread_self();};
00108 };
00109
00120 class JoinableThread : protected Thread
00121 {
00122 private:
00123 volatile bool running;
00124
00125 protected:
00130 JoinableThread(size_t size = 0);
00131
00136 virtual ~JoinableThread();
00137
00143 void join(void);
00144
00145 public:
00150 inline bool isRunning(void)
00151 {return running;};
00152
00161 void start(int priority = 0);
00162
00167 inline void background(void)
00168 {start(-1);};
00169
00170 void waitFor();
00171 };
00172 }
00173
00174 #endif