summaryrefslogtreecommitdiff
path: root/source/libs/asura-lib-utils/threading/semaphore.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/libs/asura-lib-utils/threading/semaphore.cpp')
-rw-r--r--source/libs/asura-lib-utils/threading/semaphore.cpp88
1 files changed, 0 insertions, 88 deletions
diff --git a/source/libs/asura-lib-utils/threading/semaphore.cpp b/source/libs/asura-lib-utils/threading/semaphore.cpp
deleted file mode 100644
index d59ec78..0000000
--- a/source/libs/asura-lib-utils/threading/semaphore.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-#include "../exceptions/exception.h"
-#include "../type.h"
-
-#include "semaphore.h"
-
-namespace AsuraEngine
-{
- namespace Threading
- {
-
-#define try_create_semaphore(impl) \
- if (!mImpl) \
- { \
- try \
- { \
- mImpl = new impl(init_count); \
- } \
- catch (Exception& e) \
- { \
- mImpl = nullptr; \
- } \
- }
-
- Semaphore::Semaphore(unsigned int init_count)
- : mImpl(nullptr)
- {
-#ifdef ASURA_THREAD_WIN32
- try_create_semaphore(SemaphoreWin32);
-#endif
- ASSERT(mImpl);
- }
-
- Semaphore::~Semaphore()
- {
- if (mImpl) delete mImpl;
- }
-
- void Semaphore::Signal()
- {
- ASSERT(mImpl);
- mImpl->Signal();
- }
-
- void Semaphore::Wait(int timeout)
- {
- ASSERT(mImpl);
- mImpl->Wait(timeout);
- }
-
-#if ASURA_THREAD_WIN32
-
- SemaphoreWin32::SemaphoreWin32(unsigned int init_value)
- : SemaphoreImpl(init_value)
- {
- mSem = CreateSemaphore(NULL, init_value, UINT_MAX, NULL);
- if (!mSem)
- throw Exception("Cant use win32 semaphore.");
- }
-
- SemaphoreWin32::~SemaphoreWin32()
- {
- CloseHandle(mSem);
- }
-
- void SemaphoreWin32::Signal()
- {
- InterlockedIncrement(&mCount);
- if (ReleaseSemaphore(mSem, 1, NULL) == FALSE)
- InterlockedDecrement(&mCount);
- }
-
- bool SemaphoreWin32::Wait(int timeout)
- {
- int result;
- result = WaitForSingleObject(mSem, timeout < 0 ? INFINITE : timeout);
- if (result == WAIT_OBJECT_0)
- {
- InterlockedDecrement(&mCount);
- return true;
- }
- else
- return false;
- }
-
-#endif // ASURA_THREAD_WIN32
-
- }
-} \ No newline at end of file