我需要有一个线程,递归检查一个变量,而主线程改变变量。然而,它似乎与move
,变量是不是被改变的lambda在register
。(我检查和功能的作品,它只是move
使它,所以我不能改变原来的变量)
我目前创建的代码:
use std::io::stdin;
use std::thread;
use enigo::{self, Enigo, MouseControllable};
use enigo::MouseButton;
use livesplit_hotkey::*;
fn main() {
let mut input = String::new();
let mut started = false;
println!("How many clicks per tick? (too many will lag)");
stdin().read_line(&mut input).expect("Unable to read line");
let input2 = input.trim().parse::<u16>().unwrap();
for _ in 0 .. input2 {
thread::spawn(move || {
let mut enigo = Enigo::new();
loop {
if started {
println!("clicking"); // debug
enigo.mouse_click(MouseButton::Left);
}
}
});
}
println!("Press f8 to toggle clicking");
let hook = Hook::new().unwrap();
hook.register(Hotkey { key_code: KeyCode::F8, modifiers: Modifiers::empty() }, move || {
started = !started;
}).expect("Unable to assign hotkey");
loop {}
}
我知道有些东西像Arc和Mutex,但是我不确定如何正确地使用它们。
1条答案
按热度按时间t40tm48m1#
只需使用静态
AtomicBool
代替started
:注意:
Ordering::SeqCst
可能不是理想的原子排序,您可以使用一种不太严格的排序,但我将把它留给您。