4 releases
0.2.0 | Feb 20, 2023 |
---|---|
0.1.2 | Nov 1, 2022 |
0.1.1 | Nov 1, 2022 |
0.1.0 | Oct 31, 2022 |
#40 in #timeout
18KB
319 lines
timer-rs
timer can execute a function, after waiting a specified number of time. also support async style api
install
cargo add swnb-timer
set timeout callback
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 count_clone = count.clone();
let duration = Duration::from_secs(1);
// count will increase after 1 sec
let _ = timer.set_timeout(
move || {
count_clone.fetch_add(1, SeqCst);
println!("run callback success");
},
duration,
);
std::thread::sleep(Duration::from_secs(2));
assert_eq!(count.load(SeqCst), 1);
}
cancel callback
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 count_clone = count.clone();
let cancel_timeout = timer.set_timeout(
move || {
count_clone.fetch_add(1, SeqCst);
println!("run callback success");
},
Duration::from_secs(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;
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;
}