00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __JackThread__
00022 #define __JackThread__
00023
00024 #include "JackCompilerDeps.h"
00025 #include "JackTypes.h"
00026
00027 namespace Jack
00028 {
00029
00034 class JackRunnableInterface
00035 {
00036
00037 protected:
00038
00039 JackRunnableInterface()
00040 {}
00041 virtual ~JackRunnableInterface()
00042 {}
00043
00044 public:
00045
00046 virtual bool Init()
00047 {
00048 return true;
00049 }
00050 virtual bool Execute() = 0;
00051 };
00052
00057 namespace detail
00058 {
00059
00060 class SERVER_EXPORT JackThreadInterface
00061 {
00062
00063 public:
00064
00065 enum kThreadState {kIdle, kStarting, kIniting, kRunning};
00066
00067 protected:
00068
00069 JackRunnableInterface* fRunnable;
00070 int fPriority;
00071 bool fRealTime;
00072 volatile kThreadState fStatus;
00073 int fCancellation;
00074
00075 public:
00076
00077 JackThreadInterface(JackRunnableInterface* runnable, int priority, bool real_time, int cancellation):
00078 fRunnable(runnable), fPriority(priority), fRealTime(real_time), fStatus(kIdle), fCancellation(cancellation)
00079 {}
00080
00081 kThreadState GetStatus()
00082 {
00083 return fStatus;
00084 }
00085 void SetStatus(kThreadState status)
00086 {
00087 fStatus = status;
00088 }
00089
00090 void SetParams(UInt64 period, UInt64 computation, UInt64 constraint)
00091 {}
00092
00093 int Start();
00094 int StartSync();
00095 int Kill();
00096 int Stop();
00097 void Terminate();
00098
00099 int AcquireRealTime();
00100 int AcquireRealTime(int priority);
00101 int DropRealTime();
00102
00103 pthread_t GetThreadID();
00104
00105 static int AcquireRealTimeImp(pthread_t thread, int priority);
00106 static int AcquireRealTimeImp(pthread_t thread, int priority, UInt64 period, UInt64 computation, UInt64 constraint);
00107 static int DropRealTimeImp(pthread_t thread);
00108 static int StartImp(pthread_t* thread, int priority, int realtime, void*(*start_routine)(void*), void* arg);
00109 static int StopImp(pthread_t thread);
00110 static int KillImp(pthread_t thread);
00111 };
00112
00113 }
00114
00115 }
00116
00117 bool jack_get_thread_realtime_priority_range(int * min_ptr, int * max_ptr);
00118
00119 bool jack_tls_allocate_key(jack_tls_key *key_ptr);
00120 bool jack_tls_free_key(jack_tls_key key);
00121
00122 bool jack_tls_set(jack_tls_key key, void *data_ptr);
00123 void *jack_tls_get(jack_tls_key key);
00124
00125 #endif