From fd09ec0240599e6db5ae60bff0ee2d9da044c08d Mon Sep 17 00:00:00 2001 From: Lars Op den Kamp Date: Tue, 14 Feb 2012 11:39:56 +0100 Subject: [PATCH] platform: added CCondition::Wait() without a timeout for windows. fixes compilation on windows --- src/lib/platform/windows/os-threads.h | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/lib/platform/windows/os-threads.h b/src/lib/platform/windows/os-threads.h index 52bd4bc..e082691 100644 --- a/src/lib/platform/windows/os-threads.h +++ b/src/lib/platform/windows/os-threads.h @@ -116,17 +116,36 @@ namespace PLATFORM ::SetEvent(m_conditionPreVista); } + bool Wait(mutex_t &mutex) + { + if (m_bOnVista) + { + return ((*g_SleepConditionVariableCS)(m_conditionVista, mutex, INFINITE) ? true : false); + } + else + { + ::ResetEvent(m_conditionPreVista); + MutexUnlock(mutex); + DWORD iWaitReturn = ::WaitForSingleObject(m_conditionPreVista, 1000); + MutexLock(mutex); + return (iWaitReturn == 0); + } + } + bool Wait(mutex_t &mutex, uint32_t iTimeoutMs) { + if (iTimeoutMs == 0) + return Wait(mutex); + if (m_bOnVista) { - return ((*g_SleepConditionVariableCS)(m_conditionVista, mutex, iTimeoutMs <= 0 ? INFINITE : iTimeoutMs) ? true : false); + return ((*g_SleepConditionVariableCS)(m_conditionVista, mutex, iTimeoutMs) ? true : false); } else { ::ResetEvent(m_conditionPreVista); MutexUnlock(mutex); - DWORD iWaitReturn = ::WaitForSingleObject(m_conditionPreVista, iTimeoutMs <= 0 ? 1000 : iTimeoutMs); + DWORD iWaitReturn = ::WaitForSingleObject(m_conditionPreVista, iTimeoutMs); MutexLock(mutex); return (iWaitReturn == 0); } -- 2.34.1