- CConditionImpl(void)
- {
- m_bOnVista = CheckVistaConditionFunctions();
- if (m_bOnVista)
- (*g_InitializeConditionVariable)(m_conditionVista = new CONDITION_VARIABLE);
- else
- m_conditionPreVista = ::CreateEvent(NULL, TRUE, FALSE, NULL);
- }
-
- virtual ~CConditionImpl(void)
- {
- if (m_bOnVista)
- delete m_conditionVista;
- else
- ::CloseHandle(m_conditionPreVista);
- }
-
- void Signal(void)
- {
- if (m_bOnVista)
- (*g_WakeConditionVariable)(m_conditionVista);
- else
- ::SetEvent(m_conditionPreVista);
- }
-
- void Broadcast(void)
- {
- if (m_bOnVista)
- (*g_WakeAllConditionVariable)(m_conditionVista);
- else
- ::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) ? true : false);
- }
- else
- {
- ::ResetEvent(m_conditionPreVista);
- MutexUnlock(mutex);
- DWORD iWaitReturn = ::WaitForSingleObject(m_conditionPreVista, iTimeoutMs);
- MutexLock(mutex);
- return (iWaitReturn == 0);
- }
- }
+ CConditionImpl(void);
+ virtual ~CConditionImpl(void);
+ void Signal(void);
+ void Broadcast(void);
+ bool Wait(mutex_t &mutex);
+ bool Wait(mutex_t &mutex, uint32_t iTimeoutMs);