63 InitializeCriticalSection(&m_CSWindowsMutex);
64 m_SignalEvent = CreateEvent(NULL,
false,
false,NULL);
66 pthread_mutexattr_init(&m_MutexAttr);
67 pthread_mutex_init(&m_PosixMutex ,&m_MutexAttr);
68 pthread_condattr_init(&m_ConditionalAttr);
69 pthread_cond_init(&m_PosixConditional,&m_ConditionalAttr);
78 DeleteCriticalSection(&m_CSWindowsMutex);
79 CloseHandle(m_SignalEvent);
81 pthread_mutex_destroy(&m_PosixMutex);
82 pthread_mutexattr_destroy(&m_MutexAttr);
83 pthread_cond_destroy(&m_PosixConditional);
84 pthread_condattr_destroy(&m_ConditionalAttr);
95 ResetEvent(m_SignalEvent);
97 pthread_mutex_lock(&m_PosixMutex);
99 pthread_mutex_unlock(&m_PosixMutex);
101 pthread_cond_signal(&m_PosixConditional);
114 if (WaitForSingleObject(m_SignalEvent, nWaitMS) == WAIT_OBJECT_0)
120 pthread_mutex_lock(&m_PosixMutex);
130 pthread_cond_wait(&m_PosixConditional, &m_PosixMutex);
137 pthread_mutex_unlock(&m_PosixMutex);
145 time_t current = time(NULL);
147 int nSeconds = nMS / 1000;
155 nMS -= nSeconds * 1000;
158 uni_ts.tv_sec = current + nSeconds;
159 uni_ts.tv_nsec = nMS * 1000;
162 if (pthread_cond_timedwait(&m_PosixConditional, &m_PosixMutex, &uni_ts) == 0)
167 pthread_mutex_unlock(&m_PosixMutex);
172 pthread_mutex_unlock(&m_PosixMutex);
179 pthread_mutex_unlock(&m_PosixMutex);
196 pthread_mutex_unlock(&m_PosixMutex);
209 SetEvent(m_SignalEvent);
211 pthread_mutex_lock(&m_PosixMutex);
213 pthread_mutex_unlock(&m_PosixMutex);
215 pthread_cond_signal(&m_PosixConditional);
Threading::EEventStatus Wait(int nMS=Threading::WAIT_INFINITE)