Eventを待ち受ける側はループで待機し、イベントキューに新しいEventが登録されるとコールバックする。
use std::collections::VecDeque;
use std::thread;
use std::sync::Mutex;
static deque: Mutex<VecDeque<String>> = Mutex::new(VecDeque::new());
fn main() {
let handle = thread::spawn(move || {
loop {
if deque.lock().unwrap().len() > 0 {
println!("Who' threre?");
deque.lock().unwrap().pop_front();
}
}
});
let event1 = "Peter knock".to_string();
deque.lock().unwrap().push_back(event1);
println!("{:?}", deque);
let event2 = "John knock".to_string();
deque.lock().unwrap().push_back(event2);
println!("{:?}", deque);
handle.join().unwrap();
}
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.22s
Running `target/debug/parallel`
Mutex { data: [“Peter knock”], poisoned: false, .. }
Mutex { data: [“Peter knock”, “John knock”], poisoned: false, .. }
Who’ threre?
Who’ threre?