#ifndef foomainloophfoo
#define foomainloophfoo
This file is part of PulseAudio.
Copyright 2004-2006 Lennart Poettering
Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
PulseAudio is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation; either version 2.1 of the License,
or (at your option) any later version.
PulseAudio is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
***/
#include <pulse/mainloop-api.h>
#include <pulse/cdecl.h>
PA_C_DECL_BEGIN
struct pollfd;
*
* \section overv_sec Overview
*
* The built-in main loop implementation is based on the poll() system call.
* It supports the functions defined in the main loop abstraction and very
* little else.
*
* The main loop is created using pa_mainloop_new() and destroyed using
* pa_mainloop_free(). To get access to the main loop abstraction,
* pa_mainloop_get_api() is used.
*
* \section iter_sec Iteration
*
* The main loop is designed around the concept of iterations. Each iteration
* consists of three steps that repeat during the application's entire
* lifetime:
*
* -# Prepare - Build a list of file descriptors
* that need to be monitored and calculate the next timeout.
* -# Poll - Execute the actual poll() system call.
* -# Dispatch - Dispatch any events that have fired.
*
* When using the main loop, the application can either execute each
* iteration, one at a time, using pa_mainloop_iterate(), or let the library
* iterate automatically using pa_mainloop_run().
*
* \section thread_sec Threads
*
* The main loop functions are designed to be thread safe, but the objects
* are not. What this means is that multiple main loops can be used, but only
* one object per thread.
*
*/
*
* A minimal main loop implementation based on the C library's poll()
* function. Using the routines defined herein you may create a simple
* main loop supporting the generic main loop abstraction layer as
* defined in \ref mainloop-api.h. This implementation is thread safe
* as long as you access the main loop object from a single thread only.
*
* See also \subpage mainloop
*/
typedef struct pa_mainloop pa_mainloop;
pa_mainloop *pa_mainloop_new(void);
void pa_mainloop_free(pa_mainloop* m);
on error or exit request. timeout specifies a maximum timeout for the subsequent
poll, or -1 for blocking behaviour. The timeout is specified in microseconds. */
int pa_mainloop_prepare(pa_mainloop *m, int timeout);
int pa_mainloop_poll(pa_mainloop *m);
a negative value on error. On success returns the number of source dispatched. */
int pa_mainloop_dispatch(pa_mainloop *m);
int pa_mainloop_get_retval(const pa_mainloop *m);
for pa_mainloop_prepare(), pa_mainloop_poll() and pa_mainloop_dispatch().
Returns a negative value on error or exit request. If block is nonzero,
block for events if none are queued. Optionally return the return value as
specified with the main loop's quit() routine in the integer variable retval points
to. On success returns the number of sources dispatched in this iteration. */
int pa_mainloop_iterate(pa_mainloop *m, int block, int *retval);
quit() routine is called. Returns a negative value on error. Optionally return
the return value as specified with the main loop's quit() routine in the integer
variable retval points to. */
int pa_mainloop_run(pa_mainloop *m, int *retval);
main loop. No need to free the API as it is owned by the loop
and is destroyed when the loop is freed. */
pa_mainloop_api* pa_mainloop_get_api(pa_mainloop*m);
void pa_mainloop_quit(pa_mainloop *m, int retval);
void pa_mainloop_wakeup(pa_mainloop *m);
typedef int (*pa_poll_func)(struct pollfd *ufds, unsigned long nfds, int timeout, void*userdata);
void pa_mainloop_set_poll_func(pa_mainloop *m, pa_poll_func poll_func, void *userdata);
PA_C_DECL_END
#endif