Struct Mainloop

Source
pub struct Mainloop {
    pub _inner: Rc<MainloopInner<MainloopInternal>>,
}
Expand description

This acts as a safe interface to the internal PA Mainloop.

The mainloop object pointers are further enclosed here in a ref counted wrapper, allowing this outer wrapper to have clean methods for creating event objects, which can cleanly pass a copy of the inner ref counted mainloop object to them. Giving this to events serves two purposes, firstly because they need the API pointer, secondly, it ensures that event objects do not outlive the mainloop object.

Fields§

§_inner: Rc<MainloopInner<MainloopInternal>>

The ref-counted inner data.

Implementations§

Source§

impl Mainloop

Source

pub fn new() -> Option<Self>

Allocates a new main loop object.

Source

pub fn prepare(&mut self, timeout: Option<MicroSeconds>) -> Result<(), PAErr>

Prepares for a single iteration of the main loop.

Returns Err on error or exit request.

timeout specifies a maximum timeout for the subsequent poll. None requests blocking behaviour.

Note, should the microseconds timeout value provided be too large to pass to the underlying C API (larger than std::i32::MAX), then the PAErr form of the Code::TooLarge error will be returned (within Result::Err).

Source

pub fn poll(&mut self) -> Result<u32, PAErr>

Executes the previously prepared poll.

Source

pub fn dispatch(&mut self) -> Result<u32, PAErr>

Dispatchs timeout, IO and deferred events from the previously executed poll.

On success returns the number of source dispatched.

Source

pub fn get_retval(&self) -> Retval

Gets the return value as specified with the main loop’s quit() routine.

Source

pub fn iterate(&mut self, block: bool) -> IterateResult

Runs a single iteration of the main loop.

This is a convenience function for prepare(), poll() and dispatch().

If block is true, block for events if none are queued.

Returns an IterateResult variant:

  • On success, returns IterateResult::Success containing the number of sources dispatched in this iteration.
  • If exit was requested, returns IterateResult::Quit containing quit’s retval.
  • On error, returns IterateResult::Err containing error value.
Source

pub fn run(&mut self) -> Result<Retval, (PAErr, Retval)>

Runs unlimited iterations of the main loop object until the main loop’s quit() routine is called.

On success, returns Ok containing quit’s return value. On error returns Err containing a tuple of the error value and quit’s return value.

Source

pub fn get_api<'a>(&self) -> &'a MainloopApi

Gets the abstract main loop abstraction layer vtable for this main loop.

No need to free the API as it is owned by the loop and is destroyed when the loop is freed.

Talking to PA directly with C requires fetching this pointer explicitly via this function. This is actually unnecessary through this binding. The pointer is retrieved automatically upon Mainloop creation, stored internally, and automatically obtained from it by functions that need it.

Source

pub fn quit(&mut self, retval: Retval)

Shuts down the main loop with the specified return value.

Source

pub fn wakeup(&mut self)

Interrupts a running poll (for threaded systems).

Source

pub fn set_poll_func(&mut self, poll_cb: (PollFn, *mut c_void))

Changes the poll() implementation.

Trait Implementations§

Source§

impl Mainloop for Mainloop

Source§

type MI = MainloopInner<pa_mainloop>

Inner mainloop type.
Source§

fn inner(&self) -> Rc<MainloopInner<MainloopInternal>>

Get inner mainloop.
Source§

fn new_io_event( &mut self, fd: i32, events: IoEventFlagSet, callback: Box<dyn FnMut(IoEventRef<Self::MI>, i32, IoEventFlagSet) + 'static>, ) -> Option<IoEvent<Self::MI>>

Creates a new IO event. Read more
Source§

fn new_timer_event( &mut self, tv: &UnixTs, callback: Box<dyn FnMut(TimeEventRef<Self::MI>) + 'static>, ) -> Option<TimeEvent<Self::MI>>

Creates a new timer event. Read more
Source§

fn new_timer_event_rt( &mut self, t: MonotonicTs, callback: Box<dyn FnMut(TimeEventRef<Self::MI>) + 'static>, ) -> Option<TimeEvent<Self::MI>>

Creates a new monotonic-based timer event. Read more
Source§

fn new_deferred_event( &mut self, callback: Box<dyn FnMut(DeferEventRef<Self::MI>) + 'static>, ) -> Option<DeferEvent<Self::MI>>

Creates a new deferred event. Read more
Source§

fn once_event(&mut self, callback: Box<dyn FnMut() + 'static>)

Runs the specified callback once from the main loop using an anonymous defer event. Read more
Source§

fn quit(&mut self, retval: Retval)

Calls quit
Source§

impl MainloopSignals for Mainloop

Source§

fn init_signals(&mut self) -> Result<(), PAErr>

Initializes the UNIX signal subsystem and bind it to the specified main loop.
Source§

fn signals_done(&self)

Cleans up the signal subsystem.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.