1 // Windows/Thread.h
2 
3 #ifndef __WINDOWS_THREAD_H
4 #define __WINDOWS_THREAD_H
5 
6 #include "../../C/Threads.h"
7 
8 #include "Defs.h"
9 
10 namespace NWindows {
11 
12 class CThread
13 {
14   ::CThread thread;
15 public:
CThread()16   CThread() { Thread_Construct(&thread); }
~CThread()17   ~CThread() { Close(); }
IsCreated()18   bool IsCreated() { return Thread_WasCreated(&thread) != 0; }
Close()19   WRes Close()  { return Thread_Close(&thread); }
Create(THREAD_FUNC_RET_TYPE (THREAD_FUNC_CALL_TYPE * startAddress)(void *),LPVOID parameter)20   WRes Create(THREAD_FUNC_RET_TYPE (THREAD_FUNC_CALL_TYPE *startAddress)(void *), LPVOID parameter)
21     { return Thread_Create(&thread, startAddress, parameter); }
Wait()22   WRes Wait() { return Thread_Wait(&thread); }
23 
24   #ifdef _WIN32
HANDLE()25   operator HANDLE() { return thread; }
Attach(HANDLE handle)26   void Attach(HANDLE handle) { thread = handle; }
Detach()27   HANDLE Detach() { HANDLE h = thread; thread = NULL; return h; }
Resume()28   DWORD Resume() { return ::ResumeThread(thread); }
Suspend()29   DWORD Suspend() { return ::SuspendThread(thread); }
Terminate(DWORD exitCode)30   bool Terminate(DWORD exitCode) { return BOOLToBool(::TerminateThread(thread, exitCode)); }
GetPriority()31   int GetPriority() { return ::GetThreadPriority(thread); }
SetPriority(int priority)32   bool SetPriority(int priority) { return BOOLToBool(::SetThreadPriority(thread, priority)); }
33   #endif
34 };
35 
36 }
37 
38 #endif
39