Expand description
§ARCHIVED ARCHIVED ARCHIVED
This crate is archived and will not be updated.
The code is now at
safina::timer in the
safina crate.
§safina-timer
Provides async sleep_for
and sleep_until
functions.
This crate is part of safina,
a safe async runtime.
§Features
forbid(unsafe_code)- Depends only on
std - 100% test coverage
- Source of time is
std::thread::park_timeoutviastd::sync::mpsc::Receiver::recv_timeout. - Works with
safina-executoror any async executor
§Limitations
- Building on
stablerequires the featureonce_cell. This usesonce_cellcrate which contains some unsafe code. This is necessary untilstd::lazy::OnceCellis stable. - Timers complete around 2ms late, but never early
- Allocates memory
§Examples
safina_timer::start_timer_thread();
let duration = Duration::from_secs(10);
safina_timer::sleep_for(duration).await;safina_timer::start_timer_thread();
let deadline =
Instant::now() + Duration::from_secs(1);
safina_timer::sleep_until(deadline).await;safina_timer::start_timer_thread();
let deadline =
Instant::now() + Duration::from_secs(1);
let req = safina_timer::with_deadline(
read_request(), deadline).await??;
let data = safina_timer::with_deadline(
read_data(req), deadline).await??;
safina_timer::with_deadline(
write_data(data), deadline ).await??;
safina_timer::with_deadline(
send_response(data), deadline).await??;safina_timer::start_timer_thread();
let req = safina_timer::with_timeout(
read_request(), Duration::from_secs(1)
).await??;
let data = safina_timer::with_timeout(
read_data(req), Duration::from_secs(2)
).await??;
safina_timer::with_timeout(
write_data(data), Duration::from_secs(2)
).await??;
safina_timer::with_timeout(
send_response(data),
Duration::from_secs(1)
).await??;§Documentation
§Alternatives
- futures-timer
- popular
- Supports: Wasm, Linux, Windows, macOS
- Contains generous amounts of
unsafecode - Uses
std::thread::park_timeoutas its source of time
- async-io
- popular
- single and repeating timers
- Supports: Linux, Windows, macOS, iOS, Android, and many others.
- Uses polling crate which makes unsafe calls to OS.
- async-timer
- Supports: Linux & Android
- Makes unsafe calls to OS
- tokio
- very popular
- single and repeating timers
- Supports: Linux, macOS, other unix-like operating systems, Windows
- Fast, internally complicated, and full of
unsafe
- embedded-async-timer
no_std- Supports
bare_metal
§Changelog
- v0.1.11 - Remove some type constraints.
- v0.1.10 - Use
safina-executorv0.2.0. - v0.1.9 - Name the timer thread.
- v0.1.8 - Increase test coverage
- v0.1.7 - Support stable with rust 1.51 and
once_cell. - v0.1.6 - Update dependencies
- v0.1.5 - Update docs
- v0.1.4 - Upgrade to new safina-executor version which removes need for
Box::pin. - v0.1.3 - Add badges to readme
- v0.1.2
- Update
with_deadlineandwith_timeout:- Make them panic on
TimerThreadNotStartederror and return newDeadlineExceededstruct instead ofDeadlineErrorenum. This allows callers to write a match clause likeErr(DeadlineExceeded). - Make them use
std::boxed::Box::pinso callers don’t have to.
- Make them panic on
- Make
sleep_untilandsleep_forreturn()and panic ifstart_timer_thread()has not been called.
- Update
- v0.1.1
- Use most recent waker passed to
SleepFuture::poll, as required by thestd::future::Future::pollcontract. - Add
with_deadlineandwith_timeoutfunctions.
- Use most recent waker passed to
- v0.1.0 - First published version
§TO DO
- Add a way to schedule jobs (
FnOncestructs).
§Release Process
- Edit
Cargo.tomland bump version number. - Run
./release.sh
Structs§
- Deadline
Exceeded - Deadline
Future - A future wrapper that returns
DeadlineExceededat a specified deadline. - Sleep
Future - A future that completes after the specified time.
- Timer
Thread NotStarted - Call
start_timer_threadto prevent this error.
Enums§
- Deadline
Error DeadlineError::TimerThreadNotStartedDeadlineError::DeadlineExceeded
Functions§
- sleep_
for - Returns
durationtime from now. - sleep_
until - Returns after
deadline. - start_
timer_ thread - Starts the worker thread, if it’s not already started.
You must call this before calling
sleep_untilorsleep_for. - with_
deadline - Awaits
inner, but returnsDeadlineExceededafterdeadline. - with_
timeout - Awaits
inner, but returnsDeadlineExceededafterdurationtime from now.