Multi-threaded background worker service owning a dedicated std::jthread. Integrates incoming event queue with background worker execution and cooperative shutdown via std::stop_token. Zero heap allocations, zero vtables/RTTI.
More...
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
class corium::BackgroundService< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy >
Multi-threaded background worker service owning a dedicated std::jthread. Integrates incoming event queue with background worker execution and cooperative shutdown via std::stop_token. Zero heap allocations, zero vtables/RTTI.
- Template Parameters
-
| EventVariantType | Supported event variant type list. |
| QueuePolicy | Strategy for queueing incoming events (bounded lock-free MPSC). |
| SignalPolicy | Strategy for signaling (CallbackSignalPolicy default). |
| StoragePolicy | Strategy for compile-time handler capacity and delegate storage. |
| OverflowPolicy | Strategy for queue overflow handling. |
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
Join background std::jthread cleanly.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
Get an EventSink handle targeting the main application event queue.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
template<typename Handler >
| bool corium::Service< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy >::on |
( |
Handler && |
handler | ) |
|
|
inlineinherited |
Register an event handler for incoming events with automatic event type deduction.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
template<typename EventType >
Post an event into the main application event queue.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
template<typename EventType >
| void corium::Service< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy >::postHighPriority |
( |
EventType && |
event | ) |
const |
|
inlineprotectedinherited |
Post a high-priority event into the main application event queue.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
| bool corium::Service< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy >::processOne |
( |
| ) |
|
|
inlineinherited |
Process a single incoming event from the service queue.
- Returns
- true if an event was popped and dispatched; false if queue was empty.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
| std::size_t corium::Service< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy >::pump |
( |
| ) |
|
|
inlineinherited |
Pump all pending incoming events from the queue until empty.
- Returns
- Number of events processed.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
| std::size_t corium::Service< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy >::pump |
( |
std::size_t |
maxEvents | ) |
|
|
inlineinherited |
Pump up to maxEvents pending incoming events from the queue.
- Parameters
-
| maxEvents | Maximum number of events to process. |
- Returns
- Number of events processed.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
template<typename EventType , typename Handler >
| bool corium::Service< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy >::registerHandler |
( |
Handler && |
handler | ) |
|
|
inlineinherited |
Register an event handler for incoming events with explicit event type parameter.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
template<typename TargetService , typename EventType >
Post an event directly to another registered service.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
Get an EventSink handle targeting this service's incoming event queue.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
template<typename Derived >
| void corium::BackgroundService< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy >::startThread |
( |
Derived * |
derived | ) |
|
|
inline |
Start execution loop on dedicated std::jthread.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
Request cancellation on worker std::jthread.
template<typename EventVariantType = DefaultEvents, typename QueuePolicy = BoundedMpscQueuePolicy<EventVariantType, 1024>, typename SignalPolicy = CallbackSignalPolicy, typename StoragePolicy = DefaultStoragePolicy, typename OverflowPolicy = DropNewestOverflowPolicy>
template<typename Rep , typename Period >
| std::size_t corium::BackgroundService< EventVariantType, QueuePolicy, SignalPolicy, StoragePolicy, OverflowPolicy >::waitAndPump |
( |
const std::stop_token & |
stopToken, |
|
|
const std::chrono::duration< Rep, Period > & |
timeout |
|
) |
| |
|
inline |
Wait for incoming events or timeout, then pump all available incoming events. Safe for use inside worker thread run(std::stop_token).
- Template Parameters
-
| Rep | Duration representation type. |
| Period | Duration period type. |
- Parameters
-
| stopToken | std::stop_token from run(stopToken). |
| timeout | Maximum duration to wait if queue is empty. |
- Returns
- Number of events processed.