diff options
Diffstat (limited to 'cpp/src/IceUtil/Cond.cpp')
-rw-r--r-- | cpp/src/IceUtil/Cond.cpp | 39 |
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() |