wwylele 9 лет назад
Родитель
Сommit
2a069e76a5
1 измененных файлов с 10 добавлено и 0 удалено
  1. 10 0
      src/common/thread.h

+ 10 - 0
src/common/thread.h

@@ -4,6 +4,7 @@
 
 #pragma once
 
+#include <chrono>
 #include <condition_variable>
 #include <cstddef>
 #include <mutex>
@@ -54,6 +55,15 @@ public:
         is_set = false;
     }
 
+    template <class Clock, class Duration>
+    bool WaitUntil(const std::chrono::time_point<Clock, Duration>& time) {
+        std::unique_lock<std::mutex> lk(mutex);
+        if (!condvar.wait_until(lk, time, [this] { return is_set; }))
+            return false;
+        is_set = false;
+        return true;
+    }
+
     void Reset() {
         std::unique_lock<std::mutex> lk(mutex);
         // no other action required, since wait loops on the predicate and any lingering signal will