1 #pragma once 2 3 4 namespace MT 5 { 6 // 7 // 8 // 9 class Event 10 { 11 ::HANDLE eventHandle; 12 13 private: 14 15 Event(const Event&) {} 16 void operator=(const Event&) {} 17 18 public: 19 20 Event() 21 { 22 static_assert(sizeof(Event) == sizeof(::HANDLE), "sizeof(Event) is invalid"); 23 eventHandle = NULL; 24 } 25 26 Event(EventReset::Type resetType, bool initialState) 27 { 28 eventHandle = NULL; 29 Create(resetType, initialState); 30 } 31 32 ~Event() 33 { 34 CloseHandle(eventHandle); 35 eventHandle = NULL; 36 } 37 38 void Create(EventReset::Type resetType, bool initialState) 39 { 40 if (eventHandle != NULL) 41 { 42 CloseHandle(eventHandle); 43 } 44 45 BOOL bManualReset = (resetType == EventReset::AUTOMATIC) ? FALSE : TRUE; 46 BOOL bInitialState = initialState ? TRUE : FALSE; 47 eventHandle = ::CreateEvent(NULL, bManualReset, bInitialState, NULL); 48 } 49 50 void Signal() 51 { 52 SetEvent(eventHandle); 53 } 54 55 void Reset() 56 { 57 ResetEvent(eventHandle); 58 } 59 60 bool Wait(uint32 milliseconds) 61 { 62 DWORD res = WaitForSingleObject(eventHandle, milliseconds); 63 return (res == WAIT_OBJECT_0); 64 } 65 66 }; 67 68 } 69 70 71