0
私はマルチスレッドについて学ぶためにRustの小さなゲームを書いています。う待機中のデータがない場合、ロックせずにmpsc :: channelからデータを取得
let (t1_entity_in, t1_entity_out) = mpsc::channel(); // ommited type definitions
let (t1_event_in, t1_event_out) = mpsc::channel();
let entity = Entity::new(20,20);
std::thread::spawn(move || {
let window = Window::new(1280,720);
loop {
// waits until parent send data
let entity = t1_entity_out.recv().unwrap();
window.draw(entity);
window.flip();
let events = window.get_events();
// parent starts working
}
});
'event_loop: loop {
// do stuff to the entity
t1_entity_in.send(entity.clone());
// thread 1 starts workinng
// waits until thread 1 sends data
let events = t1_event_out.recv().unwrap(); // [1]
// thread 1 sent data, continues.
for event in events {
if event.type == event::QUIT {
break 'event_loop;
}
}
}
このコードは動作しますが、それはかなりのシングルスレッドと同じように動作している:私はこのような二つのループ、ロジックを持つ1、レンダリングを持つものを、含まれているコードを得ました。私が望む振る舞いは、イベントイテレータが待っているならば[1]と書かれた行にあります。それ、どうやったら出来るの?