17namespace mqss::qrmci {
30 using Clock = std::chrono::steady_clock;
39 : publishInterval(interval) {}
50 [[nodiscard]]
bool claim(Clock::time_point now = Clock::now()) {
51 if (lastClaimed.has_value() && now - *lastClaimed < publishInterval) {
61 return publishInterval;
65 Clock::duration publishInterval;
66 std::optional<Clock::time_point> lastClaimed;
std::chrono::steady_clock Clock
Monotonic clock used for slot timing.
PublicationThrottle(Clock::duration interval=DefaultInterval)
Construct a throttle with the given interval.
static constexpr Clock::duration DefaultInterval
Minimum spacing between two publish slots, absent an explicit interval.
Clock::duration getInterval() const noexcept
Get the throttle's configured interval.
bool claim(Clock::time_point now=Clock::now())
Claim the next publication slot, if one is due.