/ src / common / utils / EventLocker.h
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  };