summaryrefslogtreecommitdiff
path: root/source/modules/asura-utils/threading/semaphore.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/modules/asura-utils/threading/semaphore.cpp')
-rw-r--r--source/modules/asura-utils/threading/semaphore.cpp154
1 files changed, 76 insertions, 78 deletions
diff --git a/source/modules/asura-utils/threading/semaphore.cpp b/source/modules/asura-utils/threading/semaphore.cpp
index 7e5ccf5..f9ffb35 100644
--- a/source/modules/asura-utils/threading/semaphore.cpp
+++ b/source/modules/asura-utils/threading/semaphore.cpp
@@ -4,98 +4,96 @@
#include "mutex.h"
#include "semaphore.h"
-namespace AsuraEngine
-{
- namespace Threading
- {
+namespace_begin(AsuraEngine)
+namespace_begin(Threading)
#define try_create_semaphore(impl) \
- if (!m_Impl) \
- { \
- try \
- { \
- m_Impl = new impl(init_count); \
- } \
- catch (Exception& e) \
- { \
- m_Impl = nullptr; \
- } \
- }
+if (!m_Impl) \
+{ \
+ try \
+ { \
+ m_Impl = new impl(init_count); \
+ } \
+ catch (Exception& e) \
+ { \
+ m_Impl = nullptr; \
+ } \
+}
- Semaphore::Semaphore(unsigned int init_count)
- : m_Impl(nullptr)
- {
+Semaphore::Semaphore(unsigned int init_count)
+ : m_Impl(nullptr)
+{
#ifdef ASURA_THREAD_WIN32
- try_create_semaphore(SemaphoreWin32);
+ try_create_semaphore(SemaphoreWin32);
#endif
- //ASSERT(m_Impl);
- }
+ //ASSERT(m_Impl);
+}
- Semaphore::~Semaphore()
- {
- if (m_Impl) delete m_Impl;
- }
+Semaphore::~Semaphore()
+{
+ if (m_Impl) delete m_Impl;
+}
- void Semaphore::Signal()
- {
- ASSERT(m_Impl);
- m_Impl->Signal();
- }
+void Semaphore::Signal()
+{
+ ASSERT(m_Impl);
+ m_Impl->Signal();
+}
- bool Semaphore::Wait(int timeout /*= ASURA_MUTEX_MAXWAIT*/)
- {
- ASSERT(m_Impl);
- return m_Impl->Wait(timeout);
- }
+bool Semaphore::Wait(int timeout /*= ASURA_MUTEX_MAXWAIT*/)
+{
+ ASSERT(m_Impl);
+ return m_Impl->Wait(timeout);
+}
#if ASURA_THREAD_WIN32
- SemaphoreWin32::SemaphoreWin32(unsigned int init_value)
- : SemaphoreImpl(init_value)
- {
- // UINT_MAX get error.
- m_Sem = CreateSemaphore(NULL, init_value, INT_MAX, NULL);
- if (!m_Sem)
- {
- int errorCode = GetLastError();
- throw Exception("Cant use win32 semaphore. Error code: %d.", errorCode);
- }
- }
+SemaphoreWin32::SemaphoreWin32(unsigned int init_value)
+ : SemaphoreImpl(init_value)
+{
+ // UINT_MAX get error.
+ m_Sem = CreateSemaphore(NULL, init_value, INT_MAX, NULL);
+ if (!m_Sem)
+ {
+ int errorCode = GetLastError();
+ throw Exception("Cant use win32 semaphore. Error code: %d.", errorCode);
+ }
+}
- SemaphoreWin32::~SemaphoreWin32()
- {
- CloseHandle(m_Sem);
- }
+SemaphoreWin32::~SemaphoreWin32()
+{
+ CloseHandle(m_Sem);
+}
- void SemaphoreWin32::Signal()
- {
- InterlockedIncrement(&m_Count);
- if (ReleaseSemaphore(m_Sem, 1, NULL) == FALSE)
- InterlockedDecrement(&m_Count);
- }
+void SemaphoreWin32::Signal()
+{
+ InterlockedIncrement(&m_Count);
+ if (ReleaseSemaphore(m_Sem, 1, NULL) == FALSE)
+ InterlockedDecrement(&m_Count);
+}
- bool SemaphoreWin32::Wait(int timeout)
- {
- int result;
- result = WaitForSingleObject(m_Sem, timeout);
- if (result == WAIT_OBJECT_0)
- {
- InterlockedDecrement(&m_Count);
- return true;
- }
- else if(result == WAIT_TIMEOUT)
- {
- // ʱ
- return false;
- }
- else
- {
- // δ֪
- throw Exception("WaitForSingleObject() failed");
- }
- }
+bool SemaphoreWin32::Wait(int timeout)
+{
+ int result;
+ result = WaitForSingleObject(m_Sem, timeout);
+ if (result == WAIT_OBJECT_0)
+ {
+ InterlockedDecrement(&m_Count);
+ return true;
+ }
+ else if(result == WAIT_TIMEOUT)
+ {
+ // ʱ
+ return false;
+ }
+ else
+ {
+ // δ֪
+ throw Exception("WaitForSingleObject() failed");
+ }
+}
#endif // ASURA_THREAD_WIN32
- }
-} \ No newline at end of file
+namespace_end
+namespace_end \ No newline at end of file