Struct wayland_client::backend::ReadEventsGuard
source · pub struct ReadEventsGuard { /* private fields */ }
Expand description
Guard for synchronizing event reading across multiple threads
If multiple threads need to read events from the Wayland socket concurrently, it is necessary to synchronize their access. Failing to do so may cause some of the threads to not be notified of new events, and sleep much longer than appropriate.
This guard is provided to ensure the proper synchronization is done. The guard is created using
the Backend::prepare_read()
method. And the event reading is
triggered by consuming the guard using the ReadEventsGuard::read()
method, synchronizing
with other threads as necessary so that only one of the threads will actually perform the socket read.
If you plan to poll the Wayland socket for readiness, the file descriptor can be retrieved via
the ReadEventsGuard::connection_fd()
method. Note that for the synchronization to
correctly occur, you must always create the ReadEventsGuard
before polling the socket.
Dropping the guard is valid and will cancel the prepared read.
Implementations§
source§impl ReadEventsGuard
impl ReadEventsGuard
sourcepub fn connection_fd(&self) -> BorrowedFd<'_>
pub fn connection_fd(&self) -> BorrowedFd<'_>
Access the Wayland socket FD for polling
sourcepub fn read(self) -> Result<usize, WaylandError>
pub fn read(self) -> Result<usize, WaylandError>
Attempt to read events from the Wayland socket
If multiple threads have a live reading guard, this method will block until all of them
are either dropped or have their read()
method invoked, at which point one of the threads
will read events from the socket and invoke the callbacks for the received events. All
threads will then resume their execution.
This returns the number of dispatched events, or 0
if an other thread handled the dispatching.
If no events are available to read from the socket, this returns a [WouldBlock
] IO error.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for ReadEventsGuard
impl RefUnwindSafe for ReadEventsGuard
impl Send for ReadEventsGuard
impl Sync for ReadEventsGuard
impl Unpin for ReadEventsGuard
impl UnwindSafe for ReadEventsGuard
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.