extern crate delay_queue;
use std::time::{Duration, Instant};
use std::thread;
use delay_queue::{Delay, DelayQueue};
fn main() {
let queue: DelayQueue<Delay<&str>> = DelayQueue::new();
let mut consumer_queue = queue.clone();
let consumer_handle = thread::spawn(move || {
println!("First pop: {}", consumer_queue.pop().value);
println!("Second pop: {}", consumer_queue.pop().value);
});
let mut producer_queue = queue.clone();
let producer_handle = thread::spawn(move || {
producer_queue.push(Delay::for_duration("3s", Duration::from_secs(3)));
producer_queue.push(Delay::until_instant("now", Instant::now()));
});
consumer_handle.join().unwrap();
producer_handle.join().unwrap();
assert!(queue.is_empty());
}