00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __JackPosixThread__
00022 #define __JackPosixThread__
00023
00024 #include "JackThread.h"
00025 #include <pthread.h>
00026
00027 namespace Jack
00028 {
00029
00030
00031
00032 #define THREAD_STACK 524288
00033
00038 class SERVER_EXPORT JackPosixThread : public detail::JackThreadInterface
00039 {
00040
00041 protected:
00042
00043 pthread_t fThread;
00044 static void* ThreadHandler(void* arg);
00045
00046 public:
00047
00048 JackPosixThread(JackRunnableInterface* runnable, bool real_time, int priority, int cancellation)
00049 : JackThreadInterface(runnable, priority, real_time, cancellation), fThread((pthread_t)NULL)
00050 {}
00051 JackPosixThread(JackRunnableInterface* runnable, int cancellation = PTHREAD_CANCEL_ASYNCHRONOUS)
00052 : JackThreadInterface(runnable, 0, false, cancellation), fThread((pthread_t)NULL)
00053 {}
00054
00055 int Start();
00056 int StartSync();
00057 int Kill();
00058 int Stop();
00059 void Terminate();
00060
00061 int AcquireRealTime();
00062 int AcquireSelfRealTime();
00063
00064 int AcquireRealTime(int priority);
00065 int AcquireSelfRealTime(int priority);
00066
00067 int DropRealTime();
00068 int DropSelfRealTime();
00069
00070 pthread_t GetThreadID();
00071
00072 static int AcquireRealTimeImp(pthread_t thread, int priority);
00073 static int AcquireRealTimeImp(pthread_t thread, int priority, UInt64 period, UInt64 computation, UInt64 constraint)
00074 { return JackPosixThread::AcquireRealTimeImp(thread, priority); }
00075 static int DropRealTimeImp(pthread_t thread);
00076 static int StartImp(pthread_t* thread, int priority, int realtime, void*(*start_routine)(void*), void* arg);
00077 static int StopImp(pthread_t thread);
00078 static int KillImp(pthread_t thread);
00079 };
00080
00081 SERVER_EXPORT void ThreadExit();
00082
00083 }
00084
00085
00086 #endif