#include #include class EventLocker { public: EventLocker(HANDLE h) { eventHandle = h; SetEvent(eventHandle); } static std::optional Get(std::wstring eventName) { EventLocker locker(eventName); if (!locker.eventHandle) { return {}; } return locker; } EventLocker(EventLocker& e) = delete; EventLocker& operator=(EventLocker& e) = delete; EventLocker(EventLocker&& e) noexcept { this->eventHandle = e.eventHandle; e.eventHandle = nullptr; } EventLocker& operator=(EventLocker&& e) noexcept { this->eventHandle = e.eventHandle; e.eventHandle = nullptr; return *this; } ~EventLocker() { if (eventHandle) { ResetEvent(eventHandle); CloseHandle(eventHandle); eventHandle = nullptr; } } private: EventLocker(std::wstring eventName) { eventHandle = CreateEvent(nullptr, true, false, eventName.c_str()); if (!eventHandle) { return; } SetEvent(eventHandle); } HANDLE eventHandle; };