An open API service indexing awesome lists of open source software.

https://github.com/roboplc/atomic-timer

Atomic timer for Rust
https://github.com/roboplc/atomic-timer

Last synced: about 1 year ago
JSON representation

Atomic timer for Rust

Awesome Lists containing this project

README

          


atomic-timer - an atomic timer for Rust
crates.io page
docs.rs page

GitHub Actions CI

A passive timer object which can be manipulated atomically. Useful for
automation and robotics tasks.

Atomic timer is a part of [RoboPLC](https://www.roboplc.com) project.

## Usage example

### Basic usage

```rust
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

```rust
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.

## MSRV

1.68.0