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?