Commit 871ba5a4 authored by Max Kellermann's avatar Max Kellermann

thread/Cond: add timed_wait() overload with std::chrono support

parent 249e8d59
......@@ -32,6 +32,8 @@
#include "PosixMutex.hxx"
#include <chrono>
#include <sys/time.h>
/**
......@@ -87,6 +89,17 @@ public:
return pthread_cond_timedwait(&cond, &mutex.mutex, &ts) == 0;
}
bool timed_wait(PosixMutex &mutex,
std::chrono::steady_clock::duration timeout) {
auto timeout_ms = std::chrono::duration_cast<std::chrono::milliseconds>(timeout).count();
if (timeout_ms < 0)
timeout_ms = 0;
else if (timeout_ms > std::numeric_limits<unsigned>::max())
timeout_ms = std::numeric_limits<unsigned>::max();
return timed_wait(mutex, timeout_ms);
}
};
#endif
......@@ -32,6 +32,8 @@
#include "CriticalSection.hxx"
#include <chrono>
/**
* Wrapper for a CONDITION_VARIABLE, backend for the Cond class.
*/
......@@ -59,6 +61,12 @@ public:
timeout_ms);
}
bool timed_wait(CriticalSection &mutex,
std::chrono::steady_clock::duration timeout) {
auto timeout_ms = std::chrono::duration_cast<std::chrono::milliseconds>(timeout).count();
return timed_wait(mutex, timeout_ms);
}
void wait(CriticalSection &mutex) {
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