Ticker

Struct Ticker 

pub struct Ticker { /* private fields */ }
Expand description

Asynchronous stream that yields every Duration, indefinitely.

This stream will tick at uniform intervals, even if blocking work is performed between ticks.

For instance, consider the following code fragment.

use embassy_time::{Duration, Timer};

#[embassy_executor::task]
async fn ticker_example_0() {
    loop {
        foo();
        Timer::after(Duration::from_secs(1)).await;
    }
}

This fragment will not call foo every second. Instead, it will call it every second + the time it took to previously call foo.

Example using ticker, which will consistently call foo once a second.

use embassy_time::{Duration, Ticker};

#[embassy_executor::task]
async fn ticker_example_1() {
    let mut ticker = Ticker::every(Duration::from_secs(1));
    loop {
        foo();
        ticker.next().await;
    }
}

§Cancel safety

It is safe to cancel waiting for the next tick, meaning no tick is lost if the Future is dropped.

Implementations§

§

impl Ticker

pub fn every(duration: Duration) -> Ticker

Creates a new ticker that ticks at the specified duration interval.

pub fn reset(&mut self)

Resets the ticker back to its original state. This causes the ticker to go back to zero, even if the current tick isn’t over yet.

pub fn reset_at(&mut self, deadline: Instant)

Reset the ticker at the deadline. If the deadline is in the past, the ticker will fire instantly.

pub fn reset_after(&mut self, after: Duration)

Resets the ticker, after the specified duration has passed. If the specified duration is zero, the next tick will be after the duration of the ticker.

pub fn next(&mut self) -> impl Future<Output = ()> + Send + Sync

Waits for the next tick.

§Cancel safety

The produced Future is cancel safe, meaning no tick is lost if the Future is dropped.

Trait Implementations§

§

impl Debug for Ticker

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl Format for Ticker

§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
§

impl FusedStream for Ticker

§

fn is_terminated(&self) -> bool

Returns true if the stream should no longer be polled.
§

impl Stream for Ticker

§

type Item = ()

Values yielded by the stream.
§

fn poll_next( self: Pin<&mut Ticker>, cx: &mut Context<'_>, ) -> Poll<Option<<Ticker as Stream>::Item>>

Attempt to pull out the next value of this stream, registering the current task for wakeup if the value is not yet available, and returning None if the stream is exhausted. Read more
§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the stream. Read more
§

impl Unpin for Ticker

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.

§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

§

const WITNESS: W = W::MAKE

A constant of the type witness
§

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

§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
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> Same for T

Source§

type Output = T

Should always be Self
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> FormatOrDebug for T
where T: Format,