RTP Trace System
1.0
|
00001 // ########################################################################## 00002 // #### #### 00003 // #### RTP Audio Server Project #### 00004 // #### ============================ #### 00005 // #### #### 00006 // #### Thread #### 00007 // #### #### 00008 // #### Version 1.00 -- February 16, 2001 #### 00009 // #### #### 00010 // #### Copyright (C) 1999 Thomas Dreibholz #### 00011 // #### 2000 Universität Bonn, Abt. IV #### 00012 // #### 2001 EMail: dreibh@iem.uni-due.de #### 00013 // #### WWW: https://www.uni-due.de/~be0001 #### 00014 // #### #### 00015 // ########################################################################## 00016 00017 00018 #ifndef THREAD_H 00019 #define THREAD_H 00020 00021 00022 #include "system.h" 00023 #include "synchronizable.h" 00024 00025 00026 #include <pthread.h> 00027 00028 00029 namespace Coral { 00030 00031 00045 class Thread : public Synchronizable 00046 { 00047 // ====== Constants ====================================================== 00048 public: 00049 static const cardinal ThreadCancelAsynchronous = 0; 00050 static const cardinal ThreadCancelDeferred = (1 << 0); 00051 00052 00053 // ====== Constructor/Destructor ========================================= 00054 public: 00063 Thread(const cardinal flags = ThreadCancelAsynchronous); 00064 00068 virtual ~Thread(); 00069 00070 00071 // ====== Status ========================================================= 00077 inline bool running() const; 00078 00079 00080 // ====== Delay ========================================================== 00089 static card64 delay(const card64 delayTimeout, const bool interruptable = false); 00090 00091 00092 // ====== Thread control ================================================= 00098 virtual bool start(); 00099 00109 virtual void stop(); 00110 00114 cardinal join(); 00115 00119 virtual void cancel(); 00120 00130 virtual void suspend(); 00131 00135 virtual void resume(); 00136 00137 00138 // ====== Tests for cancellation and suspension ========================== 00139 protected: 00144 virtual void testCancel(); 00145 00152 virtual bool testSuspension(); 00153 00159 inline static void exit(const cardinal result = 0); 00160 00166 inline static void yield(); 00167 00168 00169 // ====== run() method to be implemented by subclass ===================== 00170 protected: 00175 virtual void run() = 0; 00176 00177 00178 // ====== Private data =================================================== 00179 protected: 00180 pthread_t PThread; 00181 00182 00183 private: 00184 static void* go(void* i); 00185 00186 00187 private: 00188 pthread_mutex_t SuspensionMutex; 00189 cardinal Flags; 00190 bool IsSuspended; 00191 }; 00192 00193 00194 } 00195 00196 00197 #include "thread.icc" 00198 00199 00200 #endif