timer-rs

timer can execute a function, after waiting a specified number of time. also support async style api

install

bash cargo add swnb-timer

set timeout callback

```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));
assert_eq!(count.load(SeqCst), 1);

} ```

cancel callback

```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);

} ```

use async function;

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

}

```