CPP-TOOLBOX
Loading...
Searching...
No Matches
fixed_frequency_loop.hpp
Go to the documentation of this file.
1#ifndef RATE_LIMITED_LOOP_HPP
2#define RATE_LIMITED_LOOP_HPP
3
4#include <deque>
5#include <functional>
6#include <ostream>
8
10 public:
12 double measured_period = 0.0;
14 double requested_period = 0.0; // The requested period, i.e., the target period (1.0 / update_rate_hz)
16 double sleeping_until = 0.0;
17
18 friend std::ostream &operator<<(std::ostream &os, const IterationStats &stats) {
19 os << "Start Time: " << stats.time_at_start_of_iteration << " s, "
20 << "Measured Period: " << stats.measured_period << " s, "
21 << "Measured Frequency Hz: " << stats.measured_frequency_hz << " Hz, "
22 << "Requested Period: " << stats.requested_period << " s, "
23 << "Measured Period Delta: " << stats.measured_period_delta_wrt_requested_period << " s, "
24 << "Sleeping Until: " << stats.sleeping_until << " s";
25 return os;
26 }
27};
28
30 public:
34
35 // NOTE: this generalizes a while loop that runs at a fixed frequency, addtionally if you want to know about the
36 // statistics of the loop you can provide a loop stats function which will receive some averaged iteration stats on
37 // every tick
38 void start(
39 const std::function<void(double)> &rate_limited_func, const std::function<bool()> &termination_condition_func,
40 std::function<void(IterationStats)> loop_stats_function = [](IterationStats is) {});
41
42 std::deque<IterationStats> iteration_stats_history;
43
45
46 // NOTE: we allow the user to disable the rate limiting if they want
48
49 // NOTE: this is unused
51};
52
53#endif // RATE_LIMITED_LOOP_HPP
IterationStats get_average_loop_stats()
Definition fixed_frequency_loop.cpp:66
void start(const std::function< void(double)> &rate_limited_func, const std::function< bool()> &termination_condition_func, std::function< void(IterationStats)> loop_stats_function=[](IterationStats is) {})
a sleep based loop that runs a function at a fixed interval
Definition fixed_frequency_loop.cpp:15
double max_update_rate_hz
Definition fixed_frequency_loop.hpp:31
bool rate_limiter_enabled
Definition fixed_frequency_loop.hpp:47
Stopwatch stopwatch
Definition fixed_frequency_loop.hpp:50
FixedFrequencyLoop(double max_update_rate_hz=60)
Definition fixed_frequency_loop.hpp:32
std::deque< IterationStats > iteration_stats_history
Definition fixed_frequency_loop.hpp:42
Definition fixed_frequency_loop.hpp:9
double measured_period_delta_wrt_requested_period
Definition fixed_frequency_loop.hpp:15
double measured_period
Definition fixed_frequency_loop.hpp:12
double measured_frequency_hz
Definition fixed_frequency_loop.hpp:13
double sleeping_until
Definition fixed_frequency_loop.hpp:16
double time_at_start_of_iteration
Definition fixed_frequency_loop.hpp:11
double requested_period
Definition fixed_frequency_loop.hpp:14
friend std::ostream & operator<<(std::ostream &os, const IterationStats &stats)
Definition fixed_frequency_loop.hpp:18
A stopwatch which measures how frequently it's been pressed in seconds to be used to measure at what ...
Definition stopwatch.hpp:11