1#include <xrpl/beast/clock/basic_seconds_clock.h>
3#include <xrpl/beast/utility/instrumentation.h>
16class SecondsClockThread
22 std::condition_variable cv_;
24 std::atomic<Clock::time_point::rep> tp_;
27 ~SecondsClockThread();
38static_assert(std::atomic<std::chrono::steady_clock::rep>::is_always_lock_free);
40SecondsClockThread::~SecondsClockThread()
43 thread_.
joinable(),
"beast::SecondsClockThread::~SecondsClockThread : thread joinable");
45 std::scoped_lock
const lock(mut_);
52SecondsClockThread::SecondsClockThread() : tp_{Clock::now().time_since_epoch().
count()}
54 thread_ =
std::thread(&SecondsClockThread::run,
this);
57SecondsClockThread::Clock::time_point
58SecondsClockThread::now()
60 return Clock::time_point{Clock::duration{tp_.load()}};
64SecondsClockThread::run()
71 auto now = Clock::now();
72 tp_ = now.time_since_epoch().count();
74 if (cv_.wait_until(
lock, when, [
this] { return stop_; }))
81BasicSecondsClock::time_point
84 static SecondsClockThread kClk;
std::chrono::steady_clock Clock
int run(int argc, char **argv)