use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
use std::time::{Duration, Instant};
use minuteurs::Timer;
fn main() {
let mut timer = Timer::new(Duration::from_secs(1));
let mut watcher1 = timer.watcher();
let mut watcher2 = watcher1.clone();
let now = Instant::now();
let stop = Arc::new(AtomicBool::default());
let stop_clone = Arc::clone(&stop);
let thread1 = std::thread::spawn(move || {
while !stop_clone.load(Ordering::SeqCst) {
if watcher1.has_ticked() {
let elapsed = now.elapsed();
println!("thread1 ticked at {elapsed:?}",)
}
}
});
let stop_clone = Arc::clone(&stop);
let thread2 = std::thread::spawn(move || {
while !stop_clone.load(Ordering::SeqCst) {
if watcher2.has_ticked() {
let elapsed = now.elapsed();
println!("thread2 ticked at {elapsed:?}",)
}
}
});
for _ in 0..5 {
timer.tick();
}
stop.store(true, Ordering::SeqCst);
let _ = thread1.join();
let _ = thread2.join();
}