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