Skip to main content

WithTimeout

Struct WithTimeout 

Source
pub struct WithTimeout<T> { /* private fields */ }
Expand description

A Stop wrapper that adds a deadline.

The wrapped stop will return StopReason::TimedOut if the deadline passes, or propagate the inner stop’s reason if it stops first.

§Cost

Every check reads the clock (Instant::now()). Measured with perf on a loop that checks after every 1 KiB of PNG defiltering (record), that is about 112 instructions per check, and the loop took 22% more cycles on x86-64 (12% on a Neoverse-N1); a plain Stopper measured within noise. In return it stops no later than one check after the deadline.

If a library checks that often and the deadline doesn’t need that precision, DebouncedTimeout reads the clock only every N checks, at most 64, with N timed from two consecutive checks so that reads come about once per 100 µs. After checks slow down it can stop up to 64 of the slower checks late, unless the code holding it calls clear_calibration where the pace changes.

§Example

use almost_enough::{StopSource, Stop};
use almost_enough::time::WithTimeout;
use std::time::Duration;

let source = StopSource::new();
let timeout = WithTimeout::new(source.as_ref(), Duration::from_millis(100));

assert!(!timeout.should_stop());

std::thread::sleep(Duration::from_millis(150));
assert!(timeout.should_stop());

Implementations§

Source§

impl<T: Stop> WithTimeout<T>

Source

pub fn new(inner: T, duration: Duration) -> Self

Create a new timeout wrapper.

The deadline is calculated as Instant::now() + duration.

Source

pub fn with_deadline(inner: T, deadline: Instant) -> Self

Create a timeout wrapper with an absolute deadline.

Source

pub fn deadline(&self) -> Instant

Get the deadline.

Source

pub fn remaining(&self) -> Duration

Get the remaining time until deadline.

Returns Duration::ZERO if the deadline has passed.

Source

pub fn inner(&self) -> &T

Get a reference to the inner stop.

Source

pub fn into_inner(self) -> T

Unwrap and return the inner stop.

Source§

impl<T: Stop> WithTimeout<T>

Source

pub fn tighten(self, duration: Duration) -> Self

Add another timeout, taking the tighter of the two deadlines.

This prevents timeout nesting by updating the deadline in place.

Source

pub fn tighten_deadline(self, deadline: Instant) -> Self

Add another deadline, taking the earlier of the two.

This prevents timeout nesting by updating the deadline in place.

Trait Implementations§

Source§

impl<T: Clone> Clone for WithTimeout<T>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug> Debug for WithTimeout<T>

Source§

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

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

impl<T: Stop> Stop for WithTimeout<T>

Source§

fn check(&self) -> Result<(), StopReason>

Check if the operation should stop. Read more
Source§

fn should_stop(&self) -> bool

Returns true if the operation should stop. Read more
Source§

fn may_stop(&self) -> bool

Returns true if this stop can ever signal a stop. Read more

Auto Trait Implementations§

§

impl<T> Freeze for WithTimeout<T>
where T: Freeze,

§

impl<T> RefUnwindSafe for WithTimeout<T>
where T: RefUnwindSafe,

§

impl<T> Send for WithTimeout<T>
where T: Send,

§

impl<T> Sync for WithTimeout<T>
where T: Sync,

§

impl<T> Unpin for WithTimeout<T>
where T: Unpin,

§

impl<T> UnsafeUnpin for WithTimeout<T>
where T: UnsafeUnpin,

§

impl<T> UnwindSafe for WithTimeout<T>
where T: UnwindSafe,

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> CloneStop for T
where T: Stop + Clone + 'static,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DebouncedTimeoutExt for T
where T: Stop,

Source§

fn with_debounced_timeout(self, duration: Duration) -> DebouncedTimeout<Self>

Add a debounced timeout to this stop. Read more
Source§

fn with_debounced_deadline(self, deadline: Instant) -> DebouncedTimeout<Self>

Add a debounced timeout with an absolute deadline.
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> StopExt for T
where T: Stop,

Source§

fn or<S: Stop>(self, other: S) -> OrStop<Self, S>

Combine this stop with another, stopping if either stops. Read more
Source§

fn into_boxed(self) -> BoxedStop
where Self: 'static,

👎Deprecated since 0.4.5:

use into_token(), whose StopToken checks the same way and is Clone

Convert this stop into a BoxedStop. Deprecated: use into_token(), whose StopToken checks the same way and is Clone.
Source§

fn into_token(self) -> StopToken
where Self: 'static,

Convert this stop into a shared, cloneable StopToken. Read more
Source§

fn child(&self) -> ChildStopper
where Self: Clone + 'static,

Create a child stop that inherits cancellation from this stop. Read more
Source§

impl<T> TimeoutExt for T
where T: Stop,

Source§

fn with_timeout(self, duration: Duration) -> WithTimeout<Self>

Add a timeout to this stop. Read more
Source§

fn with_deadline(self, deadline: Instant) -> WithTimeout<Self>

Add an absolute deadline to this stop. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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.