diff --git a/src/threadloop.h b/src/threadloop.h index ff6d6111b0938e2faa522aaaab62b22d906498b3..a3269f7213d2a2a254d39464f658e069a3ea32fb 100644 --- a/src/threadloop.h +++ b/src/threadloop.h @@ -114,6 +114,17 @@ public: return cv_.wait_for(lk, rel_time, [this, pred]{ return isStopping() || pred(); }); } + template <typename Pred> + void + wait(Pred&& pred) + { + if (std::this_thread::get_id() != get_id()) + throw std::runtime_error("Can not call wait outside thread context"); + + std::unique_lock<std::mutex> lk(mutex_); + cv_.wait(lk, [this, p = std::move(pred)]{ return isStopping() || p(); }); + } + private: std::mutex mutex_; std::condition_variable cv_;