+
+ virtual ~CConditionImpl(void)
+ {
+ pthread_cond_destroy(&m_condition);
+ }
+
+ void Signal(void)
+ {
+ pthread_cond_signal(&m_condition);
+ }
+
+ void Broadcast(void)
+ {
+ pthread_cond_broadcast(&m_condition);
+ }
+
+ bool Wait(mutex_t &mutex)
+ {
+ sched_yield();
+ return (pthread_cond_wait(&m_condition, &mutex) == 0);
+ }
+
+ bool Wait(mutex_t &mutex, uint32_t iTimeoutMs)
+ {
+ if (iTimeoutMs == 0)
+ return Wait(mutex);
+
+ sched_yield();
+ struct timespec timeout = GetAbsTime(iTimeoutMs);
+ return (pthread_cond_timedwait(&m_condition, &mutex, &timeout) == 0);
+ }
+
+ pthread_cond_t m_condition;
+ };