0
我正在使用使用事件循環的discord箱。我需要同時檢查事件,而我是把用戶輸入:通過互斥體訪問事件循環
let clone = context.clone();
thread::spawn(
move || loop {
match clone.lock().unwrap().gateway.recv_event() {
Ok(event) => {
// println!("Updating state: {:?}", event);
clone.lock().unwrap().state.update(&event)
},
Err(err) => {
stderr!("Error receiving: {}", err);
},
}
}
);
這不工作,因爲它保持鎖定......那麼,關於
println!("Locking");
let mut gateway = {
&mut clone.lock().unwrap().gateway
};
println!("Unlocked? {:?}", clone);
match gateway.recv_event() {
Ok(event) => {
這也似乎不上班:
Locking
Unlocked? Mutex { <locked> }
這將如何解決?
在我看來,如果有一種方法可以在不鎖定的情況下訪問互斥鎖的內容,那可能是最好的。
The original question is here on reddit.
非常感謝您的回答!但是,問題是recv_event是需要時間的事情,但我需要同時使用它。 – jD91mZM2
@ LEGOlord208我不明白你的意思。同時調用'&mut self'方法的唯一安全方法是使用同步機制,例如'Mutex'。考慮改進您的問題以適應其他要求。 –
Ooooooooohhhhhhhhhhhhhhhhhhhh呃,我想你剛剛解決了它。也許它不一定是可變的!勒姆檢查。 aww廢話。如果這是不可能的,那麼我可能會提出一個拉動請求,以使得它不可變,如果可能的話。 – jD91mZM2