*/
#include "threading/event.h"
-
-#if defined(_WIN32)
- #ifndef WIN32_LEAN_AND_MEAN
- #define WIN32_LEAN_AND_MEAN
- #endif
- #include <windows.h>
-#endif
-
-
-#if __cplusplus < 201103L
-Event::Event()
-{
-#ifdef _WIN32
- event = CreateEvent(NULL, false, false, NULL);
-#else
- pthread_cond_init(&cv, NULL);
- pthread_mutex_init(&mutex, NULL);
-#endif
-}
-
-Event::~Event()
-{
-#ifdef _WIN32
- CloseHandle(event);
-#else
- pthread_cond_destroy(&cv);
- pthread_mutex_destroy(&mutex);
-#endif
-}
-#endif
-
+#include "threading/mutex_auto_lock.h"
void Event::wait()
{
-#if __cplusplus >= 201103L
MutexAutoLock lock(mutex);
while (!notified) {
cv.wait(lock);
}
notified = false;
-#elif defined(_WIN32)
- WaitForSingleObject(event, INFINITE);
-#else
- pthread_mutex_lock(&mutex);
- while (!notified) {
- pthread_cond_wait(&cv, &mutex);
- }
- notified = false;
- pthread_mutex_unlock(&mutex);
-#endif
}
void Event::signal()
{
-#if __cplusplus >= 201103L
MutexAutoLock lock(mutex);
notified = true;
cv.notify_one();
-#elif defined(_WIN32)
- SetEvent(event);
-#else
- pthread_mutex_lock(&mutex);
- notified = true;
- pthread_cond_signal(&cv);
- pthread_mutex_unlock(&mutex);
-#endif
}
-