pub enum Kind {
Asynchronous {
messages_per_update: u32,
},
Isochronous {
tick_ms: u32,
ticks_per_update: u32,
},
Mesochronous {
tick_ms: u32,
ticks_per_update: u32,
},
Anisochronous,
}
Expand description
Specifies the loop behavior of a process.
Asynchronous
is a loop that blocks waiting on exactly one channel endpoint.Isochronous
is a fixed-timestep loop in which endpoints are polled once per ‘tick’ and will attempt to “catch up” if it falls behind.Mesochronous
is a rate-limited loop that polls processes and loops immediately if enough time has passed and otherwise sleeps for the remaining duration until the next ‘tick’.Anisochronous
is an un-timed polling loop which always loops immediately and always processes one update per tick.
Variants§
Asynchronous
Block waiting on one or more endpoints.
Asynchronous processes can only hold multiple endpoints of compatible
kinds of channels. Currently this is either any number of sink endpoints,
or else any number and combination of simplex or source endpoints. This is
validated internally when defining an Def
struct with the provided
kind and endpoints.
Isochronous
A fixed-time step polling loop that will try to “catch up” if it falls behind.
Mesochronous
A rate-limited polling loop.
Anisochronous
Poll to exhaustion and update immediately.
This is useful for blocking update functions as in a readline loop or a rendering loop.
Note that unlike other polling process kinds (Isochronous
and
Mesochronous
), ticks and updates are always one-to-one since an
external blocking mechanism is expected to be used in the update
function.
Implementations§
Source§impl Kind
impl Kind
pub fn asynchronous_default() -> Self
pub fn isochronous_default() -> Self
pub fn mesochronous_default() -> Self
pub const fn anisochronous_default() -> Self
pub fn new_asynchronous( messages_per_update: u32, ) -> Result<Self, Vec<KindError>>
pub fn new_isochronous( tick_ms: u32, ticks_per_update: u32, ) -> Result<Self, Vec<KindError>>
pub fn new_mesochronous( tick_ms: u32, ticks_per_update: u32, ) -> Result<Self, Vec<KindError>>
pub const fn new_anisochronous() -> Self
Trait Implementations§
impl Eq for Kind
impl StructuralPartialEq for Kind
Auto Trait Implementations§
impl Freeze for Kind
impl RefUnwindSafe for Kind
impl Send for Kind
impl Sync for Kind
impl Unpin for Kind
impl UnwindSafe for Kind
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more