1*f6dc9357SAndroid Build Coastguard Worker // Windows/Thread.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_WINDOWS_THREAD_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_WINDOWS_THREAD_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker #include "../../C/Threads.h" 7*f6dc9357SAndroid Build Coastguard Worker 8*f6dc9357SAndroid Build Coastguard Worker #include "Defs.h" 9*f6dc9357SAndroid Build Coastguard Worker 10*f6dc9357SAndroid Build Coastguard Worker namespace NWindows { 11*f6dc9357SAndroid Build Coastguard Worker 12*f6dc9357SAndroid Build Coastguard Worker class CThread MY_UNCOPYABLE 13*f6dc9357SAndroid Build Coastguard Worker { 14*f6dc9357SAndroid Build Coastguard Worker ::CThread thread; 15*f6dc9357SAndroid Build Coastguard Worker public: CThread()16*f6dc9357SAndroid Build Coastguard Worker CThread() { Thread_CONSTRUCT(&thread) } ~CThread()17*f6dc9357SAndroid Build Coastguard Worker ~CThread() { Close(); } IsCreated()18*f6dc9357SAndroid Build Coastguard Worker bool IsCreated() { return Thread_WasCreated(&thread) != 0; } Close()19*f6dc9357SAndroid Build Coastguard Worker WRes Close() { return Thread_Close(&thread); } 20*f6dc9357SAndroid Build Coastguard Worker // WRes Wait() { return Thread_Wait(&thread); } Wait_Close()21*f6dc9357SAndroid Build Coastguard Worker WRes Wait_Close() { return Thread_Wait_Close(&thread); } 22*f6dc9357SAndroid Build Coastguard Worker Create(THREAD_FUNC_TYPE startAddress,LPVOID param)23*f6dc9357SAndroid Build Coastguard Worker WRes Create(THREAD_FUNC_TYPE startAddress, LPVOID param) 24*f6dc9357SAndroid Build Coastguard Worker { return Thread_Create(&thread, startAddress, param); } Create_With_Affinity(THREAD_FUNC_TYPE startAddress,LPVOID param,CAffinityMask affinity)25*f6dc9357SAndroid Build Coastguard Worker WRes Create_With_Affinity(THREAD_FUNC_TYPE startAddress, LPVOID param, CAffinityMask affinity) 26*f6dc9357SAndroid Build Coastguard Worker { return Thread_Create_With_Affinity(&thread, startAddress, param, affinity); } Create_With_CpuSet(THREAD_FUNC_TYPE startAddress,LPVOID param,const CCpuSet * cpuSet)27*f6dc9357SAndroid Build Coastguard Worker WRes Create_With_CpuSet(THREAD_FUNC_TYPE startAddress, LPVOID param, const CCpuSet *cpuSet) 28*f6dc9357SAndroid Build Coastguard Worker { return Thread_Create_With_CpuSet(&thread, startAddress, param, cpuSet); } 29*f6dc9357SAndroid Build Coastguard Worker 30*f6dc9357SAndroid Build Coastguard Worker #ifdef _WIN32 HANDLE()31*f6dc9357SAndroid Build Coastguard Worker operator HANDLE() { return thread; } Attach(HANDLE handle)32*f6dc9357SAndroid Build Coastguard Worker void Attach(HANDLE handle) { thread = handle; } Detach()33*f6dc9357SAndroid Build Coastguard Worker HANDLE Detach() { HANDLE h = thread; thread = NULL; return h; } Resume()34*f6dc9357SAndroid Build Coastguard Worker DWORD Resume() { return ::ResumeThread(thread); } Suspend()35*f6dc9357SAndroid Build Coastguard Worker DWORD Suspend() { return ::SuspendThread(thread); } Terminate(DWORD exitCode)36*f6dc9357SAndroid Build Coastguard Worker bool Terminate(DWORD exitCode) { return BOOLToBool(::TerminateThread(thread, exitCode)); } GetPriority()37*f6dc9357SAndroid Build Coastguard Worker int GetPriority() { return ::GetThreadPriority(thread); } SetPriority(int priority)38*f6dc9357SAndroid Build Coastguard Worker bool SetPriority(int priority) { return BOOLToBool(::SetThreadPriority(thread, priority)); } 39*f6dc9357SAndroid Build Coastguard Worker #endif 40*f6dc9357SAndroid Build Coastguard Worker }; 41*f6dc9357SAndroid Build Coastguard Worker 42*f6dc9357SAndroid Build Coastguard Worker } 43*f6dc9357SAndroid Build Coastguard Worker 44*f6dc9357SAndroid Build Coastguard Worker #endif 45