userver: engine::PulseEventSubscription Class Reference
Loading...
Searching...
No Matches
engine::PulseEventSubscription Class Referencefinal

#include <userver/engine/pulse_event.hpp>

Detailed Description

A one-shot subscription from PulseEvent::Subscribe.

Satisfies engine::Awaitable, for use with engine::WaitAnyContext and friends.

Note
For simple "subscribe to updates" cases a callback API is often more convenient: concurrent::AsyncEventChannel.

Example. A parent task publishes two atomic config fields and wakes all consumers. Each consumer assembles a Config and passes it to ApplyConfig.

Initialization:

struct Config {
int timeout_ms{};
bool enabled{};
bool operator==(const Config&) const = default;
};
std::atomic<int> apply_calls{0};
const auto apply_config = [&apply_calls](const Config& /*config*/) {
apply_calls.fetch_add(1, std::memory_order_relaxed);
};
std::atomic<int> timeout_ms{0};
std::atomic<bool> enabled{false};

Publisher side:

timeout_ms.store(100, std::memory_order_relaxed);
enabled.store(true, std::memory_order_relaxed);
event.Send();

Consumer side:

Config last{};
auto subscription = event.Subscribe();
const Config config{
.timeout_ms = timeout_ms.load(std::memory_order_relaxed),
.enabled = enabled.load(std::memory_order_relaxed),
};
if (config != last) {
apply_config(config);
last = config;
continue;
}
if (subscription.WaitUntil({}) != engine::FutureStatus::kReady) {
break;
}
}

Definition at line 41 of file pulse_event.hpp.

Inheritance diagram for engine::PulseEventSubscription:

Public Member Functions

 PulseEventSubscription (const PulseEventSubscription &)=delete
 PulseEventSubscription (PulseEventSubscription &&other) noexcept
PulseEventSubscription & operator= (const PulseEventSubscription &)=delete
PulseEventSubscription & operator= (PulseEventSubscription &&other) noexcept
bool IsValid () const noexcept
bool IsReady () const noexcept override
FutureStatus WaitUntil (Deadline)
 Waits until a concurrent PulseEvent::Send satisfies this subscription, or the deadline expires, or the current task is cancelled.
AwaitableToken GetAwaitableToken () noexcept
 Satisfies engine::Awaitable, for use with engine::WaitAnyContext and friends.

Member Function Documentation

◆ IsReady()

bool engine::PulseEventSubscription::IsReady ( ) const
nodiscardoverridenoexcept
Returns
true if a PulseEvent::Send after this subscription has already happened

◆ IsValid()

bool engine::PulseEventSubscription::IsValid ( ) const
nodiscardnoexcept
Returns
true if this object was issued by PulseEvent::Subscribe

◆ PulseEvent

friend class PulseEvent
friend

Definition at line 64 of file pulse_event.hpp.


The documentation for this class was generated from the following file: