embassy-time

Crates

git

Versions

default

Flavors

Struct Ticker

Source
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§

Source§

impl Ticker

Source

pub fn every(duration: Duration) -> Self

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

Source

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.

Source

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.

Source

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.

Source

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§

Source§

impl FusedStream for Ticker

Source§

fn is_terminated(&self) -> bool

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

impl Stream for Ticker

Source§

type Item = ()

Values yielded by the stream.
Source§

fn poll_next( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Option<Self::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
Source§

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

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

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.

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.