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

template<typename Rep , typename Period >
void run (const std::chrono::duration< Rep, Period > &duration)
 Dispatches pending events.
 
template<typename Rep , typename Period >
result< void > try_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 &&)=delete
 
user_event_loopoperator= (user_event_loop &&)=delete
 
- Public Member Functions inherited from idfxx::event_loop
template<typename IdEnum >
listener_handle listener_add (event_base< IdEnum > base, IdEnum id, event_callback< std::type_identity_t< IdEnum > > callback)
 Registers a typed listener for a specific event.
 
template<typename IdEnum >
listener_handle listener_add (event_type< IdEnum > event, event_callback< std::type_identity_t< IdEnum > > callback)
 Registers a typed listener for a specific event.
 
template<typename IdEnum >
listener_handle listener_add (event_base< IdEnum > base, event_callback< std::type_identity_t< IdEnum > > callback)
 Registers a typed listener for any event from a base.
 
template<typename IdEnum >
result< listener_handletry_listener_add (event_base< IdEnum > base, IdEnum id, event_callback< std::type_identity_t< IdEnum > > callback)
 Registers a typed listener for a specific event.
 
template<typename IdEnum >
result< listener_handletry_listener_add (event_type< IdEnum > event, event_callback< std::type_identity_t< IdEnum > > callback)
 Registers a typed listener for a specific event.
 
template<typename IdEnum >
result< listener_handletry_listener_add (event_base< IdEnum > base, event_callback< std::type_identity_t< IdEnum > > callback)
 Registers a typed listener for any event from a base.
 
void listener_remove (listener_handle handle)
 Removes a listener by handle.
 
result< void > try_listener_remove (listener_handle handle)
 Removes a listener by handle.
 
template<typename IdEnum >
void post (event_base< IdEnum > base, IdEnum id, const void *data=nullptr, size_t size=0)
 Posts a typed event, waiting indefinitely.
 
template<typename IdEnum , typename Rep , typename Period >
void post (event_base< IdEnum > base, IdEnum id, const void *data, size_t size, const std::chrono::duration< Rep, Period > &timeout)
 Posts a typed event with a timeout.
 
template<typename IdEnum >
void post (event_type< IdEnum > event, const void *data=nullptr, size_t size=0)
 Posts a typed event via event_type, waiting indefinitely.
 
template<typename IdEnum , typename Rep , typename Period >
void post (event_type< IdEnum > event, const void *data, size_t size, const std::chrono::duration< Rep, Period > &timeout)
 Posts a typed event via event_type with a timeout.
 
template<typename IdEnum >
result< void > try_post (event_base< IdEnum > base, IdEnum id, const void *data=nullptr, size_t size=0)
 Posts a typed event, waiting indefinitely.
 
template<typename IdEnum , typename Rep , typename Period >
result< void > try_post (event_base< IdEnum > base, IdEnum id, const void *data, size_t size, const std::chrono::duration< Rep, Period > &timeout)
 Posts a typed event with a timeout.
 
template<typename IdEnum >
result< void > try_post (event_type< IdEnum > event, const void *data=nullptr, size_t size=0)
 Posts a typed event via event_type, waiting indefinitely.
 
template<typename IdEnum , typename Rep , typename Period >
result< void > try_post (event_type< IdEnum > event, const void *data, size_t size, const std::chrono::duration< Rep, Period > &timeout)
 Posts a typed event via event_type with a timeout.
 
esp_event_loop_handle_t idf_handle () const
 Returns the underlying ESP-IDF event loop handle.
 
virtual ~event_loop ()
 Virtual destructor.
 
 event_loop (const event_loop &)=delete
 
event_loopoperator= (const event_loop &)=delete
 
 event_loop (event_loop &&)=delete
 
event_loopoperator= (event_loop &&)=delete
 

Friends

class event_loop
 

Additional Inherited Members

- 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< void > try_create_system ()
 Creates the system (default) event loop.
 
static result< void > try_destroy_system ()
 Destroys the system (default) event loop.
 
static event_loopsystem ()
 Returns a reference to the system (default) event loop.
 
static std::unique_ptr< user_event_loopmake_user (size_t queue_size=32)
 Creates a user event loop without a dedicated task.
 
static std::unique_ptr< event_loopmake_user (task_config task, size_t queue_size=32)
 Creates a user event loop with a dedicated dispatch task.
 
static result< std::unique_ptr< user_event_loop > > try_make_user (size_t queue_size=32)
 Creates a user event loop without a dedicated task.
 
static result< std::unique_ptr< event_loop > > try_make_user (task_config task, size_t queue_size=32)
 Creates a user event loop with a dedicated dispatch task.
 
- Protected Member Functions inherited from idfxx::event_loop
 event_loop (esp_event_loop_handle_t handle)
 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 event_loop::make_user() or event_loop::try_make_user() without a task_config.

// Create loop without task (manual dispatch)
auto loop = event_loop::make_user(16);
loop->listener_add(my_events, my_event::started, callback);
loop->post(my_events, my_event::started);
loop->run(100ms);
// Generic code accepts event_loop&
void register_handlers(event_loop& loop) {
loop.listener_add(my_events, my_event::started, callback);
}
register_handlers(*loop);
Base class for event loops.
Definition event.hpp:211
listener_handle listener_add(event_base< IdEnum > base, IdEnum id, event_callback< std::type_identity_t< IdEnum > > callback)
Registers a typed listener for a specific event.
Definition event.hpp:846
static std::unique_ptr< user_event_loop > make_user(size_t queue_size=32)
Creates a user event loop without a dedicated task.
Definition event.hpp:834

Definition at line 778 of file event.hpp.

Constructor & Destructor Documentation

◆ user_event_loop() [1/2]

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

◆ user_event_loop() [2/2]

idfxx::user_event_loop::user_event_loop ( user_event_loop &&  )
delete

Member Function Documentation

◆ 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 &&  )
delete

◆ 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 799 of file event.hpp.

References try_run(), and 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 815 of file event.hpp.

References idfxx::event_loop::idf_handle(), idfxx::chrono::ticks(), and idfxx::wrap().

Referenced by run().

Friends And Related Symbol Documentation

◆ event_loop

friend class event_loop
friend

Definition at line 779 of file event.hpp.


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