1 #ifndef _MADARA_UTILITY_EPOCHENFORCER_H_
2 #define _MADARA_UTILITY_EPOCHENFORCER_H_
16 template<
typename CLOCK = std::chrono::steady_clock>
47 std::chrono::duration<double> temp_duration(
duration);
49 std::chrono::duration_cast<std::chrono::nanoseconds>(temp_duration);
60 std::chrono::duration<double> temp_period(period);
61 period_ = std::chrono::duration_cast<std::chrono::nanoseconds>(temp_period);
71 auto current_time = CLOCK::now();
73 while (
next_ <= current_time)
83 auto current_time = CLOCK::now();
85 return current_time >=
next_;
104 return CLOCK::now() >=
max_;
113 auto dur = std::chrono::duration_cast<std::chrono::nanoseconds>(
116 return (uint64_t)dur.count();
126 std::chrono::duration_cast<std::chrono::seconds>(CLOCK::now() -
start_);
128 return (uint64_t)dur.count();
137 auto dur = std::chrono::duration_cast<std::chrono::duration<double>>(
140 return (
double)dur.count();
147 template<
typename PERIOD = std::chrono::nanoseconds>
150 auto dur = std::chrono::duration_cast<PERIOD>(CLOCK::now() -
start_);
152 return (uint64_t)dur.count();
160 std::chrono::time_point<CLOCK>
max_;
163 std::chrono::time_point<CLOCK>
next_;
Enforces a periodic epoch.
void start(void)
Starts the timer.
bool is_done(void) const
Checks to see if max duration is finished.
bool has_reached_next(void) const
Checks if current time is at or past next.
std::chrono::time_point< CLOCK > next_
the next epoch to sleep to
EpochEnforcer(double period, double max_duration=-1)
Constructor.
std::chrono::nanoseconds period_
the period of the epochs
uint64_t duration(void) const
Returns a duration in user-specified period.
uint64_t duration_ns(void) const
Returns a duration in nanoseconds.
double duration_ds(void) const
Returns a duration in seconds (double format)
uint64_t duration_s(void) const
Returns a duration in seconds.
std::chrono::time_point< CLOCK > max_
the end of the timer duration
void advance_next(void)
Advance next.
void sleep_until_next(void)
Sleeps until the next epoch.
void set_duration(double duration)
Sets the maximum duration for the enforcer.
std::chrono::time_point< CLOCK > start_
the start of the timer duration
void set_period(double period)
Sets the period for the enforcer.
Provides utility functions and classes for common tasks and needs.
Duration sleep_until(TimeValue wake)
Copyright(c) 2020 Galois.