RustBox
不执行
Send
,因此没有(安全的)方法在线程之间共享它(似乎您已经找到了尚未合并的pull请求)
https://github.com/gchp/rustbox/pull/65
这将支持
邮寄
).
生锈的箱子
在一个
Mutex
,即。
Mutex<RustBox>
,对它的引用可以在线程之间共享。
但接下来你会遇到终身问题:你的
rustbox
引用的寿命不够长,无法使用它生成新线程,因此您必须将其包装在
Arc
.
use std::sync::{Arc,Mutex};
fn mark_at(x: usize, y: usize, rustbox: &Arc<Mutex<RustBox>>) {
rustbox.lock().unwrap().print(x, y, rustbox::RB_BOLD, Color::Black, Color::White, "+");
let rustbox = rustbox.clone(); // increment reference counter
thread::spawn(move || {
let delay = Duration::from_millis(2000);
thread::sleep(delay);
rustbox.lock().unwrap().print(x, y, rustbox::RB_BOLD, Color::Black, Color::White, " ");
});
}
在你的
main
函数,您必须将
生锈的箱子
:
let rustbox = Arc::new(Mutex::new(rustbox));
和
lock()
每次你使用它。
确保锁不要放得太久;使用辅助变量可能有助于使其更明确,例如:
let pe = rustbox.lock().unwrap().poll_event(false);
match pe {
// ...
}