26 std::chrono::system_clock::time_point
now() const noexcept {
27 return std::chrono::system_clock::now();
35 return std::chrono::steady_clock::now();
42 void wait_for(std::chrono::nanoseconds duration)
const {
43 if (duration <= std::chrono::nanoseconds::zero()) {
46 std::this_thread::sleep_for(duration);
59template <
typename Clock>
72 std::chrono::system_clock::time_point
now()
const {
return clock_->now(); }
78 std::chrono::steady_clock::time_point
monotonic_now()
const {
return clock_->monotonic_now(); }
84 void wait_for(std::chrono::nanoseconds duration) { clock_->wait_for(duration); }
102 explicit ManualClock(std::chrono::system_clock::time_point start = {}) : now_(start) {}
108 std::chrono::system_clock::time_point
now() const noexcept {
return now_; }
114 std::chrono::steady_clock::time_point
monotonic_now() const noexcept {
return monotonic_; }
120 void wait_for(std::chrono::nanoseconds duration)
noexcept {
122 if (duration > std::chrono::nanoseconds::zero()) {
123 now_ += std::chrono::duration_cast<std::chrono::system_clock::duration>(duration);
124 monotonic_ += std::chrono::duration_cast<std::chrono::steady_clock::duration>(duration);
133 void advance(std::chrono::nanoseconds duration)
noexcept {
134 now_ += std::chrono::duration_cast<std::chrono::system_clock::duration>(duration);
135 if (duration > std::chrono::nanoseconds::zero()) {
136 monotonic_ += std::chrono::duration_cast<std::chrono::steady_clock::duration>(duration);
144 void jump(std::chrono::nanoseconds duration)
noexcept {
145 now_ += std::chrono::duration_cast<std::chrono::system_clock::duration>(duration);
152 std::size_t
waits() const noexcept {
return waits_; }
158 std::chrono::nanoseconds
waited() const noexcept {
return waited_; }
161 std::chrono::system_clock::time_point now_;
162 std::chrono::steady_clock::time_point monotonic_{};
163 std::size_t waits_{0};
164 std::chrono::nanoseconds waited_{std::chrono::nanoseconds::zero()};
ClockReference(Clock &clock) noexcept
Refers to a clock.
void wait_for(std::chrono::nanoseconds duration)
Waits on the referenced clock.
std::chrono::steady_clock::time_point monotonic_now() const
Returns the referenced clock's monotonic reading.
std::chrono::system_clock::time_point now() const
Returns the referenced clock's wall-clock time.
std::chrono::system_clock::time_point now() const noexcept
Returns the current time.
ManualClock(std::chrono::system_clock::time_point start={})
Constructs a clock.
void advance(std::chrono::nanoseconds duration) noexcept
Advances the clock without counting a wait: time that passed, as inside a slow call.
std::chrono::steady_clock::time_point monotonic_now() const noexcept
Returns the monotonic reading: how far wait_for and advance have moved the clock.
std::chrono::nanoseconds waited() const noexcept
Returns the total positive duration passed to wait_for.
std::size_t waits() const noexcept
Returns how many times wait_for was called.
void jump(std::chrono::nanoseconds duration) noexcept
Moves the wall-clock reading alone, forward or back, as an operator or NTP setting the clock does.
void wait_for(std::chrono::nanoseconds duration) noexcept
Advances the clock by a duration instead of waiting, and counts the wait.
The real clock a live loop uses: wall-clock time to stamp events, monotonic time to wait and to measu...
std::chrono::steady_clock::time_point monotonic_now() const noexcept
Returns a reading that only moves forward, for measuring elapsed time.
void wait_for(std::chrono::nanoseconds duration) const
Blocks for a duration, measured on the monotonic clock.
std::chrono::system_clock::time_point now() const noexcept
Returns the current wall-clock time.
Runs a strategy: the runner, the polling loop, the order journal, and stopping.
The library: broker-neutral types (core), and the modules below.