summaryrefslogtreecommitdiff
path: root/cpp/src/IceUtil/Cond.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceUtil/Cond.cpp')
-rw-r--r--cpp/src/IceUtil/Cond.cpp39
1 files changed, 27 insertions, 12 deletions
diff --git a/cpp/src/IceUtil/Cond.cpp b/cpp/src/IceUtil/Cond.cpp
index a0f71460f1e..e63405e7184 100644
--- a/cpp/src/IceUtil/Cond.cpp
+++ b/cpp/src/IceUtil/Cond.cpp
@@ -15,13 +15,34 @@
#ifdef _WIN32
+# ifdef ICE_HAS_WIN32_CONDVAR
+
+IceUtil::Cond::Cond()
+{
+ InitializeConditionVariable(&_cond);
+}
+
+IceUtil::Cond::~Cond()
+{
+}
+
+void
+IceUtil::Cond::signal()
+{
+ WakeConditionVariable(&_cond);
+}
+
+void
+IceUtil::Cond::broadcast()
+{
+ WakeAllConditionVariable(&_cond);
+}
+
+# else
+
IceUtilInternal::Semaphore::Semaphore(long initial)
{
-#ifndef ICE_OS_WINRT
_sem = CreateSemaphore(0, initial, 0x7fffffff, 0);
-#else
- _sem = CreateSemaphoreExW(0, initial, 0x7fffffff, 0, 0, SEMAPHORE_ALL_ACCESS);
-#endif
if(_sem == INVALID_HANDLE_VALUE)
{
throw IceUtil::ThreadSyscallException(__FILE__, __LINE__, GetLastError());
@@ -36,11 +57,7 @@ IceUtilInternal::Semaphore::~Semaphore()
void
IceUtilInternal::Semaphore::wait() const
{
-#ifndef ICE_OS_WINRT
DWORD rc = WaitForSingleObject(_sem, INFINITE);
-#else
- DWORD rc = WaitForSingleObjectEx(_sem, INFINITE, true);
-#endif
if(rc != WAIT_OBJECT_0)
{
throw IceUtil::ThreadSyscallException(__FILE__, __LINE__, GetLastError());
@@ -56,11 +73,7 @@ IceUtilInternal::Semaphore::timedWait(const IceUtil::Time& timeout) const
throw IceUtil::InvalidTimeoutException(__FILE__, __LINE__, timeout);
}
-#ifndef ICE_OS_WINRT
DWORD rc = WaitForSingleObject(_sem, static_cast<DWORD>(msTimeout));
-#else
- DWORD rc = WaitForSingleObjectEx(_sem, static_cast<DWORD>(msTimeout), true);
-#endif
if(rc != WAIT_TIMEOUT && rc != WAIT_OBJECT_0)
{
throw IceUtil::ThreadSyscallException(__FILE__, __LINE__, GetLastError());
@@ -305,6 +318,8 @@ IceUtil::Cond::timedDowait(const Time& timeout) const
}
}
+# endif // ICE_HAS_WIN32_CONDVAR
+
#else
IceUtil::Cond::Cond()