General Utility Library for C++14  2.11
Trigger.h
Go to the documentation of this file.
1 
23 #ifndef GUL14_TRIGGER_H_
24 #define GUL14_TRIGGER_H_
25 
26 #include <chrono>
27 #include <condition_variable>
28 #include <mutex>
29 
30 #include "gul14/internal.h"
31 
32 namespace gul14 {
33 
110 class Trigger
111 {
112 public:
114  explicit Trigger(bool triggered = false) noexcept : triggered_{ triggered }
115  {}
116 
121  GUL_EXPORT
122  ~Trigger() noexcept;
123 
125  Trigger(const Trigger&) = delete;
126  Trigger(Trigger&&) = delete;
127  Trigger& operator=(const Trigger&) = delete;
128  Trigger& operator=(Trigger&&) = delete;
129 
143  GUL_EXPORT
144  operator bool() const noexcept;
145 
150  GUL_EXPORT
151  Trigger& operator=(bool interrupt) noexcept;
152 
154  GUL_EXPORT
155  void reset() noexcept;
156 
161  GUL_EXPORT
162  void trigger() noexcept;
163 
168  GUL_EXPORT
169  void wait() const;
170 
188  template <class Rep, class Period>
189  bool wait_for(const std::chrono::duration<Rep, Period>& delta_t) const
190  {
191  std::unique_lock<std::mutex> lock(mutex_);
192  return cv_.wait_for(lock, delta_t, [this]{ return triggered_; });
193  }
194 
211  template <class Clock, class Duration>
212  bool wait_until(const std::chrono::time_point<Clock, Duration>& t) const
213  {
214  std::unique_lock<std::mutex> lock(mutex_);
215  return cv_.wait_until(lock, t, [this]{ return triggered_; });
216  }
217 
218 private:
219  mutable std::mutex mutex_; // Protects private data and is used with the condition variable
220  mutable std::condition_variable cv_;
221  bool triggered_ = false;
222 };
223 
225 
226 } // namespace gul14
227 
228 #endif
A class that allows sending triggers and waiting for them across different threads.
Definition: Trigger.h:111
GUL_EXPORT void reset() noexcept
Set the trigger to low (false).
Definition: Trigger.cc:54
Trigger(bool triggered=false) noexcept
Constructor.
Definition: Trigger.h:114
GUL_EXPORT ~Trigger() noexcept
Destructor: Send a final trigger signal so that all threads waiting on this object have a chance to s...
Definition: Trigger.cc:28
bool wait_until(const std::chrono::time_point< Clock, Duration > &t) const
Suspend execution of the current thread until the trigger goes high (true) or the given time point ha...
Definition: Trigger.h:212
GUL_EXPORT void trigger() noexcept
Set the trigger to high (true).
Definition: Trigger.cc:60
bool wait_for(const std::chrono::duration< Rep, Period > &delta_t) const
Suspend execution of the current thread until the trigger goes high (true) or at least the given time...
Definition: Trigger.h:189
GUL_EXPORT void wait() const
Suspend execution of the current thread until the trigger goes high (true).
Definition: Trigger.cc:72
Definition of macros used internally by GUL.
Namespace gul14 contains all functions and classes of the General Utility Library.
Definition: doxygen.h:26