mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-05 18:57:19 +02:00
62 lines
1.2 KiB
C
62 lines
1.2 KiB
C
|
|
#include <windows.h>
|
||
|
|
#include <string>
|
||
|
|
|
||
|
|
class EventLocker
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
EventLocker(HANDLE h)
|
||
|
|
{
|
||
|
|
eventHandle = h;
|
||
|
|
SetEvent(eventHandle);
|
||
|
|
}
|
||
|
|
|
||
|
|
static std::optional<EventLocker> 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;
|
||
|
|
}
|
||
|
|
|
||
|
|
~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;
|
||
|
|
};
|