5 releases
0.2.0 | Dec 28, 2024 |
---|---|
0.1.3 | Dec 23, 2024 |
0.1.2 | Dec 23, 2024 |
0.1.1 | Dec 23, 2024 |
0.1.0 | Dec 22, 2024 |
#494 in Encoding
473 downloads per month
17KB
340 lines
atomic-timer - an atomic timer for Rust
A passive timer object which can be manipulated atomically. Useful for automation and robotics tasks.
Atomic timer is a part of RoboPLC project.
Usage example
Basic usage
use atomic_timer::AtomicTimer;
use std::time::Duration;
let timer = AtomicTimer::new(Duration::from_secs(1));
for _ in 0..100 {
if timer.expired() {
println!("Timer expired");
timer.reset(); // does not need to be mutable
} else {
println!("Elapsed: {:?}, remaining: {:?}", timer.elapsed(), timer.remaining());
}
// do some work
}
Multi-threaded usage
use atomic_timer::AtomicTimer;
use std::sync::Arc;
use std::time::Duration;
let timer = Arc::new(AtomicTimer::new(Duration::from_secs(1)));
for _ in 0..10 {
let timer = timer.clone();
std::thread::spawn(move || {
for _ in 0..100 {
if timer.reset_if_expired() {
println!("Timer expired");
// react to the timer expiration
// guaranteed to be true only for one thread
}
// do some other work
}
});
}
Serialization / deserialization
Atomic timer objects can be safely serialized and de-serialized (requires
serde
feature).
When a timer is de-serialized, it keeps its state (elapsed/remaining time), despite the system monotonic clock difference.
Limitations
Currently does not works on WASM (can be added, write an issue if you really need it).
MSRV
1.68.0
Dependencies
~2.5MB
~54K SLoC