EventLocker.h
1 #include <windows.h> 2 #include <string> 3 4 class EventLocker 5 { 6 public: 7 EventLocker(HANDLE h) 8 { 9 eventHandle = h; 10 SetEvent(eventHandle); 11 } 12 13 static std::optional<EventLocker> Get(std::wstring eventName) 14 { 15 EventLocker locker(eventName); 16 if (!locker.eventHandle) 17 { 18 return {}; 19 } 20 21 return locker; 22 } 23 24 EventLocker(EventLocker& e) = delete; 25 EventLocker& operator=(EventLocker& e) = delete; 26 27 EventLocker(EventLocker&& e) noexcept 28 { 29 this->eventHandle = e.eventHandle; 30 e.eventHandle = nullptr; 31 } 32 33 EventLocker& operator=(EventLocker&& e) noexcept 34 { 35 this->eventHandle = e.eventHandle; 36 e.eventHandle = nullptr; 37 return *this; 38 } 39 40 ~EventLocker() 41 { 42 if (eventHandle) 43 { 44 ResetEvent(eventHandle); 45 CloseHandle(eventHandle); 46 eventHandle = nullptr; 47 } 48 } 49 private: 50 EventLocker(std::wstring eventName) 51 { 52 eventHandle = CreateEvent(nullptr, true, false, eventName.c_str()); 53 if (!eventHandle) 54 { 55 return; 56 } 57 58 SetEvent(eventHandle); 59 } 60 61 HANDLE eventHandle; 62 };