idfxx 1.0.0
Modern C++23 components for ESP-IDF
Loading...
Searching...
No Matches
idfxx::user_event_loop Class Reference

User-created event loop with manual dispatch. More...

Inheritance diagram for idfxx::user_event_loop:
idfxx::event_loop

Public Member Functions

 user_event_loop (size_t queue_size)
 Creates a user event loop without a dedicated task.
 
template<typename Rep , typename Period >
void run (const std::chrono::duration< Rep, Period > &duration)
 Dispatches pending events.
 
template<typename Rep , typename Period >
result< voidtry_run (const std::chrono::duration< Rep, Period > &duration)
 Dispatches pending events.
 
 user_event_loop (const user_event_loop &)=delete
 
user_event_loopoperator= (const user_event_loop &)=delete
 
 user_event_loop (user_event_loop &&) noexcept=default
 
user_event_loopoperator= (user_event_loop &&) noexcept=default
 
- Public Member Functions inherited from idfxx::event_loop
 event_loop (task_config task, size_t queue_size=32)
 Creates an event loop with a dedicated dispatch task.
 
template<typename IdEnum , typename DataType >
listener_handle listener_add (event< IdEnum, DataType > event, event_handler< DataType > callback)
 Registers a type-safe listener for a specific event.
 
template<typename IdEnum >
listener_handle listener_add (event_base< IdEnum > base, opaque_event_handler< std::type_identity_t< IdEnum > > callback)
 Registers a listener for any event from a base.
 
template<typename IdEnum , typename DataType >
result< listener_handletry_listener_add (event< IdEnum, DataType > event, event_handler< DataType > callback)
 Registers a type-safe listener for a specific event.
 
template<typename IdEnum >
result< listener_handletry_listener_add (event_base< IdEnum > base, opaque_event_handler< std::type_identity_t< IdEnum > > callback)
 Registers a listener for any event from a base.
 
void listener_remove (listener_handle handle)
 Removes a listener by handle.
 
result< voidtry_listener_remove (listener_handle handle)
 Removes a listener by handle.
 
template<typename IdEnum >
void post (event< IdEnum > evt)
 Posts an event without data, waiting indefinitely.
 
template<typename IdEnum , typename Rep , typename Period >
void post (event< IdEnum > evt, const std::chrono::duration< Rep, Period > &timeout)
 Posts an event without data, with a timeout.
 
template<typename IdEnum , typename DataType >
requires event_data<DataType>
void post (event< IdEnum, DataType > evt, const DataType &data)
 Posts an event with data, waiting indefinitely.
 
template<typename IdEnum , typename DataType , typename Rep , typename Period >
requires event_data<DataType>
void post (event< IdEnum, DataType > evt, const DataType &data, const std::chrono::duration< Rep, Period > &timeout)
 Posts an event with data, with a timeout.
 
template<typename IdEnum >
result< voidtry_post (event< IdEnum > evt)
 Posts an event without data, waiting indefinitely.
 
template<typename IdEnum , typename Rep , typename Period >
result< voidtry_post (event< IdEnum > evt, const std::chrono::duration< Rep, Period > &timeout)
 Posts an event without data, with a timeout.
 
template<typename IdEnum , typename DataType >
requires event_data<DataType>
result< voidtry_post (event< IdEnum, DataType > evt, const DataType &data)
 Posts an event with data, waiting indefinitely.
 
template<typename IdEnum , typename DataType , typename Rep , typename Period >
requires event_data<DataType>
result< voidtry_post (event< IdEnum, DataType > evt, const DataType &data, const std::chrono::duration< Rep, Period > &timeout)
 Posts an event with data, with a timeout.
 
esp_event_loop_handle_t idf_handle () const
 Returns the underlying ESP-IDF event loop handle.
 
 ~event_loop ()
 
 event_loop (const event_loop &)=delete
 
event_loopoperator= (const event_loop &)=delete
 
 event_loop (event_loop &&other) noexcept
 Move constructor.
 
event_loopoperator= (event_loop &&other) noexcept
 Move assignment.
 

Static Public Member Functions

static result< user_event_loopmake (size_t queue_size=32)
 Creates a user event loop without a dedicated task.
 
- Static Public Member Functions inherited from idfxx::event_loop
static void create_system ()
 Creates the system (default) event loop.
 
static void destroy_system ()
 Destroys the system (default) event loop.
 
static result< voidtry_create_system ()
 Creates the system (default) event loop.
 
static result< voidtry_destroy_system ()
 Destroys the system (default) event loop.
 
static event_loopsystem ()
 Returns a reference to the system (default) event loop.
 
static result< event_loopmake (task_config task, size_t queue_size=32)
 Creates an event loop with a dedicated dispatch task.
 

Additional Inherited Members

- Protected Member Functions inherited from idfxx::event_loop
 event_loop ()=default
 
 event_loop (esp_event_loop_handle_t handle, bool system=false)
 Constructs an event_loop with the given handle.
 

Detailed Description

User-created event loop with manual dispatch.

Inherits all listener registration and event posting operations from event_loop, and adds manual dispatch via run()/try_run(). Created via user_event_loop::make() or its constructor.

// Create loop without task (manual dispatch)
inline constexpr event<my_event> started{my_event::started};
auto loop = user_event_loop(16);
loop.listener_add(started, callback);
loop.post(started);
loop.run(100ms);
// Generic code accepts event_loop&
loop.listener_add(started, callback);
}
Base class for event loops.
Definition event.hpp:300
User-created event loop with manual dispatch.
Definition event.hpp:848
std::expected< T, std::error_code > result
result type wrapping a value or error code.
Definition error.hpp:120

Definition at line 848 of file event.hpp.

Constructor & Destructor Documentation

◆ user_event_loop() [1/3]

idfxx::user_event_loop::user_event_loop ( size_t  queue_size)
explicit

Creates a user event loop without a dedicated task.

Events must be dispatched manually via run().

Parameters
queue_sizeMaximum number of events in the queue.
Note
Only available when CONFIG_COMPILER_CXX_EXCEPTIONS is enabled.
Exceptions
std::system_erroron failure.

◆ user_event_loop() [2/3]

idfxx::user_event_loop::user_event_loop ( const user_event_loop )
delete

◆ user_event_loop() [3/3]

idfxx::user_event_loop::user_event_loop ( user_event_loop &&  )
defaultnoexcept

Member Function Documentation

◆ make()

static result< user_event_loop > idfxx::user_event_loop::make ( size_t  queue_size = 32)
static

Creates a user event loop without a dedicated task.

Events must be dispatched manually via try_run().

Parameters
queue_sizeMaximum number of events in the queue.
Returns
A user event loop with manual dispatch support, or an error.

◆ operator=() [1/2]

user_event_loop & idfxx::user_event_loop::operator= ( const user_event_loop )
delete

◆ operator=() [2/2]

user_event_loop & idfxx::user_event_loop::operator= ( user_event_loop &&  )
defaultnoexcept

◆ run()

template<typename Rep , typename Period >
void idfxx::user_event_loop::run ( const std::chrono::duration< Rep, Period > &  duration)
inline

Dispatches pending events.

Call this to manually dispatch events from the queue.

Template Parameters
RepThe representation type of the duration.
PeriodThe period type of the duration.
Parameters
durationMaximum time to spend dispatching events.
Note
Only available when CONFIG_COMPILER_CXX_EXCEPTIONS is enabled.
Exceptions
std::system_erroron failure.

Definition at line 891 of file event.hpp.

References idfxx::unwrap().

◆ try_run()

template<typename Rep , typename Period >
result< void > idfxx::user_event_loop::try_run ( const std::chrono::duration< Rep, Period > &  duration)
inline

Dispatches pending events.

Call this to manually dispatch events from the queue.

Template Parameters
RepThe representation type of the duration.
PeriodThe period type of the duration.
Parameters
durationMaximum time to spend dispatching events.
Returns
Success or an error.

Definition at line 907 of file event.hpp.

References idfxx::error(), and idfxx::wrap().


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