Commit c5c43c45 authored by Max Kellermann's avatar Max Kellermann

thread/Cond: add method timed_wait()

parent 0954f580
......@@ -32,6 +32,8 @@
#include "PosixMutex.hxx"
#include <sys/time.h>
/**
* Low-level wrapper for a pthread_cond_t.
*/
......@@ -55,6 +57,17 @@ public:
void wait(PosixMutex &mutex) {
pthread_cond_wait(&cond, &mutex.mutex);
}
bool timed_wait(PosixMutex &mutex, unsigned timeout_ms) {
struct timeval now;
gettimeofday(&now, nullptr);
struct timespec ts;
ts.tv_sec = now.tv_sec + timeout_ms / 1000;
ts.tv_nsec = (now.tv_usec + (timeout_ms % 1000) * 1000) * 1000;
return pthread_cond_timedwait(&cond, &mutex.mutex, &ts) == 0;
}
};
#endif
......@@ -54,9 +54,13 @@ public:
WakeAllConditionVariable(&cond);
}
bool timed_wait(CriticalSection &mutex, DWORD timeout_ms) {
return SleepConditionVariableCS(&cond, &mutex.critical_section,
timeout_ms);
}
void wait(CriticalSection &mutex) {
SleepConditionVariableCS(&cond, &mutex.critical_section,
INFINITE);
timed_wait(mutex, INFINITE);
}
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment