embassy-time

Crates

git

Versions

default

Flavors

Ticker

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: impl Into<Duration>) -> Self

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

§Panics

Panics if the computed instant overflows. Avoid panics with Ticker::try_every().

Source

pub fn try_every(duration: impl Into<Duration>) -> Option<Self>

Tries to create a new ticker that ticks at the specified duration interval.

This is a panic-free Ticker::every().

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.

§Panics

Panics if the computed instant overflows. Avoid panics with Ticker::checked_reset().

Source

pub fn checked_reset(&mut self) -> Option<()>

Checked 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.

This is a panic-free Ticker::reset().

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 before the next scheduled tick.

§Panics

Panics if the computed instant overflows. Avoid panics with Ticker::checked_reset_at().

Source

pub fn checked_reset_at(&mut self, deadline: Instant) -> Option<()>

Checked reset the ticker at the deadline. If the deadline is in the past, the ticker will fire before the next scheduled tick.

This is a panic-free Ticker::reset_at().

Source

pub fn reset_after(&mut self, after: impl Into<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.

§Panics

Panics if the computed instant overflows. Avoid panics with Ticker::checked_reset_after().

Source

pub fn checked_reset_after(&mut self, after: impl Into<Duration>) -> Option<()>

Checked 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.

This is a panic-free Ticker::reset_after().

Source

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

Waits for the next tick.

§Panics

Panics if the next computed instant overflows.

§Cancel safety

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

Trait Implementations§

Source§

impl Debug for Ticker

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Format for Ticker

Source§

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

Writes the defmt representation of self to fmt.
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§

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

Attempt to pull the next tick from this Stream.

  • Returns Poll::Pending if the instant is in the future.
  • Returns Poll::Ready(Some(())) if the instant has been reached, and computes the next instant.
§Panics

Panics if the computed instant overflows.

Source§

type Item = ()

Values yielded by the stream.
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.