aboutsummaryrefslogtreecommitdiff
path: root/zencore/thread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'zencore/thread.cpp')
-rw-r--r--zencore/thread.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/zencore/thread.cpp b/zencore/thread.cpp
index 4451fd302..5e558069b 100644
--- a/zencore/thread.cpp
+++ b/zencore/thread.cpp
@@ -94,6 +94,51 @@ NamedEvent::NamedEvent(std::string_view EventName) : Event(nullptr)
m_EventHandle = CreateEventA(nullptr, true, false, Name.c_str());
}
+NamedMutex::~NamedMutex()
+{
+ if (m_MutexHandle)
+ {
+ CloseHandle(m_MutexHandle);
+ }
+}
+
+bool
+NamedMutex::Create(std::string_view MutexName)
+{
+ ZEN_ASSERT(m_MutexHandle == nullptr);
+
+ using namespace std::literals;
+
+ ExtendableStringBuilder<64> Name;
+ Name << "Global\\"sv;
+ Name << MutexName;
+
+ m_MutexHandle = CreateMutexA(nullptr, /* InitialOwner */ TRUE, Name.c_str());
+
+ return !!m_MutexHandle;
+}
+
+bool
+NamedMutex::Exists(std::string_view MutexName)
+{
+ using namespace std::literals;
+
+ ExtendableStringBuilder<64> Name;
+ Name << "Global\\"sv;
+ Name << MutexName;
+
+ void* MutexHandle = OpenMutexA(SYNCHRONIZE, /* InheritHandle */ FALSE, Name.c_str());
+
+ if (MutexHandle == nullptr)
+ {
+ return false;
+ }
+
+ CloseHandle(MutexHandle);
+
+ return true;
+}
+
Process::Process() = default;
void