https://git.reactos.org/?p=reactos.git;a=commitdiff;h=eaa975c54e6bbc467e70fc5b1de3bef4fafd93d0

commit eaa975c54e6bbc467e70fc5b1de3bef4fafd93d0
Author:     Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com>
AuthorDate: Fri Dec 22 12:13:27 2023 +0900
Commit:     Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com>
CommitDate: Fri Dec 22 12:13:27 2023 +0900

    [SDK] Add <cicero/cicmutex.h>
    
    CORE-19361
---
 sdk/include/reactos/cicero/cicmutex.h | 50 +++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/sdk/include/reactos/cicero/cicmutex.h 
b/sdk/include/reactos/cicero/cicmutex.h
new file mode 100644
index 00000000000..9c98146e8c0
--- /dev/null
+++ b/sdk/include/reactos/cicero/cicmutex.h
@@ -0,0 +1,50 @@
+/*
+ * PROJECT:     ReactOS Cicero
+ * LICENSE:     LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE:     Cicero mutex handling
+ * COPYRIGHT:   Copyright 2023 Katayama Hirofumi MZ 
<katayama.hirofumi...@gmail.com>
+ */
+
+#pragma once
+
+#include "cicbase.h"
+
+class CicMutex
+{
+    HANDLE m_hMutex;
+    BOOL m_bInit;
+
+public:
+    CicMutex() : m_hMutex(NULL), m_bInit(FALSE)
+    {
+    }
+    ~CicMutex()
+    {
+        Uninit();
+    }
+
+    void Init(LPSECURITY_ATTRIBUTES lpSA, LPCWSTR pszMutexName)
+    {
+        m_hMutex = ::CreateMutexW(lpSA, FALSE, pszMutexName);
+        m_bInit = TRUE;
+    }
+    void Uninit()
+    {
+        if (m_hMutex)
+        {
+            ::CloseHandle(m_hMutex);
+            m_hMutex = NULL;
+        }
+        m_bInit = FALSE;
+    }
+
+    BOOL Enter()
+    {
+        DWORD dwWait = ::WaitForSingleObject(m_hMutex, 5000);
+        return (dwWait == WAIT_OBJECT_0) || (dwWait == WAIT_ABANDONED);
+    }
+    void Leave()
+    {
+        ::ReleaseMutex(m_hMutex);
+    }
+};

Reply via email to