powerd++  0.4.4
Cycle.hpp
Go to the documentation of this file.
1 
7 #ifndef _POWERDXX_TIMING_CYCLE_HPP_
8 #define _POWERDXX_TIMING_CYCLE_HPP_
9 
10 #include <chrono> /* std::chrono::steady_clock::now() */
11 #include <unistd.h> /* usleep() */
12 
16 namespace timing {
17 
82 class Cycle {
83  private:
87  using clock = std::chrono::steady_clock;
88 
92  using us = std::chrono::microseconds;
93 
97  std::chrono::time_point<clock> clk = clock::now();
98 
99  public:
112  bool operator ()() const {
113  auto const remainingTime{
114  std::chrono::duration_cast<us>(this->clk - clock::now())
115  };
116  auto const sleepDuration = remainingTime.count();
117  return sleepDuration <= 0 || 0 == usleep(sleepDuration);
118  }
119 
137  template <class... DurTraits>
138  bool operator ()(std::chrono::duration<DurTraits...> const & cycleTime) {
139  this->clk += cycleTime;
140  return (*this)();
141  }
142 
143 };
144 
145 } /* namespace timing */
146 
147 #endif /* _POWERDXX_TIMING_CYCLE_HPP_ */
timing::Cycle::clk
std::chrono::time_point< clock > clk
The current time clock.
Definition: Cycle.hpp:97
timing
Namespace for time management related functionality.
Definition: Cycle.hpp:16
timing::Cycle::clock
std::chrono::steady_clock clock
Use steady_clock, avoid time jumps.
Definition: Cycle.hpp:87
timing::Cycle
Implements an interruptible cyclic sleeping functor.
Definition: Cycle.hpp:82
timing::Cycle::us
std::chrono::microseconds us
Shorthand for microseconds.
Definition: Cycle.hpp:92
timing::Cycle::operator()
bool operator()() const
Completes an interrupted sleep cycle.
Definition: Cycle.hpp:112