PipeWire 1.4.1
|
Control an event loop. More...
#include <spa/support/loop.h>
Data Fields | |
uint32_t | version |
int(* | get_fd )(void *object) |
get the loop fd | |
void(* | add_hook )(void *object, struct spa_hook *hook, const struct spa_loop_control_hooks *hooks, void *data) |
Add a hook. | |
void(* | enter )(void *object) |
Enter a loop. | |
void(* | leave )(void *object) |
Leave a loop. | |
int(* | iterate )(void *object, int timeout) |
Perform one iteration of the loop. | |
int(* | check )(void *object) |
Check context of the loop. | |
Control an event loop.
The event loop control function provide API to run the event loop.
The below (pseudo)code is a minimal example outlining the use of the loop control:
It is also possible to add the loop to an existing event loop by using the spa_loop_control_get_fd() call. This fd will become readable when activity has been detected on the sources in the loop. spa_loop_control_iterate() with a 0 timeout should be called to process the pending sources.
spa_loop_control_enter() and spa_loop_control_leave() should be called once from the thread that will run the iterate() function.
uint32_t spa_loop_control_methods::version |
int(* spa_loop_control_methods::get_fd) (void *object) |
get the loop fd
object | the control to query |
Get the fd of this loop control. This fd will be readable when a source in the loop has activity. The user should call iterate() with a 0 timeout to schedule one iteration of the loop and dispatch the sources.
void(* spa_loop_control_methods::add_hook) (void *object, struct spa_hook *hook, const struct spa_loop_control_hooks *hooks, void *data) |
Add a hook.
object | the control to change |
hooks | the hooks to add |
Adds hooks to the loop controlled by ctrl.
void(* spa_loop_control_methods::enter) (void *object) |
Enter a loop.
object | the control |
This function should be called before calling iterate and is typically used to capture the thread that this loop will run in. It should ideally be called once from the thread that will run the loop.
void(* spa_loop_control_methods::leave) (void *object) |
Leave a loop.
object | the control |
It should ideally be called once after calling iterate when the loop will no longer be iterated from the thread that called enter().
int(* spa_loop_control_methods::iterate) (void *object, int timeout) |
Perform one iteration of the loop.
ctrl | the control |
timeout | an optional timeout in milliseconds. 0 for no timeout, -1 for infinite timeout. |
This function will block up to timeout milliseconds and then dispatch the fds with activity. The number of dispatched fds is returned.
int(* spa_loop_control_methods::check) (void *object) |
Check context of the loop.
ctrl | the control |
This function will check if the current thread is currently the one that did the enter call. Since version 1:1.
returns 1 on success, 0 or negative errno value on error.