timer can execute a function, after waiting a specified number of time. also support async style api
bash
cargo add swnb-timer
```rust use std::{ sync::{atomic::AtomicUsize, Arc}, time::Duration, };
use std::sync::atomic::Ordering::SeqCst;
use swnb_timer::Timer;
fn main(){ let timer = Timer::new(); let count = Arc::new(AtomicUsize::new(0)); let countclone = count.clone(); let duration = Duration::fromsecs(1); // count will increase after 1 sec let _ = timer.settimeout( move || { countclone.fetch_add(1, SeqCst); println!("run callback success"); }, duration, );
std::thread::sleep(Duration::from_secs(2));
} ```
```rust use std::{ sync::{atomic::AtomicUsize, Arc}, time::Duration, };
use std::sync::atomic::Ordering::SeqCst;
use swnb_timer::Timer;
fn sleep(duration: Duration) { std::thread::sleep(duration); }
fn main() { let timer = Timer::new(); let count = Arc::new(AtomicUsize::new(1)); let countclone = count.clone(); let canceltimeout = timer.settimeout( move || { countclone.fetchadd(1, SeqCst); println!("run callback success"); }, Duration::fromsecs(1), );
sleep(Duration::from_millis(20));
// cancel timeout callback;
cancel_timeout();
sleep(Duration::from_secs(1));
// count still be 1;
assert_eq!(count.load(SeqCst), 1);
} ```
```rust use std::time::Duration;
use swnb_timer::Timer;
async fn main() { let timer = Timer::new();
// print count every 1 sec
let async_block = async {
let mut count = 1;
loop {
timer.wait(Duration::from_secs(1)).await;
count += 1;
println!("{count}");
}
};
async_block.await;
}
```