diff options
Diffstat (limited to 'gnss/common/utils/default/include/Utils.h')
-rw-r--r-- | gnss/common/utils/default/include/Utils.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/gnss/common/utils/default/include/Utils.h b/gnss/common/utils/default/include/Utils.h index 7065a6fb00..ad8f539248 100644 --- a/gnss/common/utils/default/include/Utils.h +++ b/gnss/common/utils/default/include/Utils.h @@ -56,6 +56,31 @@ struct Utils { static hidl_vec<V2_1::IGnssAntennaInfoCallback::GnssAntennaInfo> getMockAntennaInfos(); }; +struct ThreadBlocker { + // returns false if unblocked: + template <class R, class P> + bool wait_for(std::chrono::duration<R, P> const& time) { + std::unique_lock<std::mutex> lock(m); + return !cv.wait_for(lock, time, [&] { return terminate; }); + } + + void notify() { + std::unique_lock<std::mutex> lock(m); + terminate = true; + cv.notify_all(); + } + + void reset() { + std::unique_lock<std::mutex> lock(m); + terminate = false; + } + + private: + std::condition_variable cv; + std::mutex m; + bool terminate = false; +}; + } // namespace common } // namespace gnss } // namespace hardware |