[−][src]Crate safina_timer
This is a safe Rust library providing async sleep_for
and sleep_until
functions.
These functions return futures that complete at the specified time.
It works well with safina
.
Features
forbid(unsafe_code)
- Depends only on
std
- Good test coverage (95%)
- Source of time is
std::thread::park_timeout
viastd::sync::mpsc::Receiver::recv_timeout
.
Limitations
- Requires Rust
nightly
, for OnceCell - Timers complete around 2ms late, but never early
- Allocates memory
Examples
safina_timer::start_timer_thread(); safina_timer::sleep_for(Duration::from_secs(10)).await.unwrap();
safina_timer::start_timer_thread(); let deadline = Instant::now() + Duration::from_millis(500); safina_timer::sleep_until(deadline).await.unwrap();
Documentation
https://docs.rs/safina-timer
Alternatives
- futures-timer
- popular
- Supports: Wasm, Linux, Windows, macOS
- Contains generous amounts of
unsafe
code - Uses
std::thread::park_timeout
as 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 OSes, Windows
- Fast, internally complicated, and full of
unsafe
- embedded-async-timer
- no_std
- Supports: bare_metal
Release Process
- Edit
Cargo.toml
and bump version number. - Run
./release.sh
Changelog
- v0.1.1
- Use most recent waker passed to
SleepFuture::poll
, as required by thestd::future::Future::poll
contract. - Add
with_deadline
andwith_timeout
functions.
- Use most recent waker passed to
- v0.1.0 - First published version
TO DO
- DONE - Implement
sleep_until
- DONE - Implement
sleep_for
- DONE - Add tests
- Add docs
- Publish on crates.io
Structs
DeadlineFuture | A future wrapper that returns DeadlineExceeded at a specified deadline. |
SleepFuture | A future that completes after the specified time. |
TimerThreadNotStarted | Call |
Enums
DeadlineError |
Functions
sleep_for | Returns a future that completes |
sleep_until | Returns a future that completes after |
start_timer_thread | Starts the worker thread, if it's not already started.
You must call this before calling |
with_deadline | Make a future that awaits |
with_timeout | Make a future that awaits |