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 @@ ...@@ -32,6 +32,8 @@
#include "PosixMutex.hxx" #include "PosixMutex.hxx"
#include <chrono>
#include <sys/time.h> #include <sys/time.h>
/** /**
...@@ -87,6 +89,17 @@ public: ...@@ -87,6 +89,17 @@ public:
return pthread_cond_timedwait(&cond, &mutex.mutex, &ts) == 0; 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 #endif
...@@ -32,6 +32,8 @@ ...@@ -32,6 +32,8 @@
#include "CriticalSection.hxx" #include "CriticalSection.hxx"
#include <chrono>
/** /**
* Wrapper for a CONDITION_VARIABLE, backend for the Cond class. * Wrapper for a CONDITION_VARIABLE, backend for the Cond class.
*/ */
...@@ -59,6 +61,12 @@ public: ...@@ -59,6 +61,12 @@ public:
timeout_ms); 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) { void wait(CriticalSection &mutex) {
timed_wait(mutex, 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