00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_CSUTIL_THREADING_PTHREAD_THREAD_H__
00020 #define __CS_CSUTIL_THREADING_PTHREAD_THREAD_H__
00021
00022 #ifndef DOXYGEN_RUN
00023
00024 #include <pthread.h>
00025 #include "csutil/threading/barrier.h"
00026
00027 namespace CS
00028 {
00029 namespace Threading
00030 {
00031
00032 enum ThreadPriority;
00033 class Runnable;
00034
00035 namespace Implementation
00036 {
00037
00038
00039 class CS_CRYSTALSPACE_EXPORT ThreadBase : public CS::Utility::AtomicRefCount
00040 {
00041 public:
00042 ThreadBase (Runnable* runnable);
00043
00044 void Start ();
00045
00046 void Stop ();
00047
00048 bool IsRunning () const;
00049
00050 bool SetPriority (ThreadPriority prio);
00051
00052 void Wait () const;
00053
00054 static void Yield ();
00055
00056 static ThreadID GetThreadID ();
00057
00058 ThreadPriority GetPriority () const
00059 {
00060 return priority;
00061 }
00062
00063 private:
00064 csRef<Runnable> runnable;
00065
00066 pthread_t threadHandle;
00067
00068 int32 isRunning;
00069 ThreadPriority priority;
00070 Barrier startupBarrier;
00071 };
00072
00073
00074 }
00075 }
00076 }
00077
00078 #endif // DOXYGEN_RUN
00079
00080 #endif // __CS_CSUTIL_THREADING_PTHREAD_THREAD_H__