我对rust很陌生,也是一个真正的编程新手。我正在写一个rust程序,它会检测空闲状态,并打印出上次输入后的时间。我使用的是winapi crate。下面的代码返回的值在0 ns到31 ms之间,无论我按下一个键或移动鼠标的时间有多长。它从来没有超过31 ms。
use winapi::um::{
winuser::{
LASTINPUTINFO,
PLASTINPUTINFO,
GetLastInputInfo
},
};
fn sleep(milliseconds: u64){
let mills = std::time::Duration::from_millis(milliseconds);
std::thread::sleep(mills);
}
fn main() {
loop {
let now = unsafe { winapi::um::sysinfoapi::GetTickCount() };
let mut last_input_info = LASTINPUTINFO {
cbSize: std::mem::size_of::<LASTINPUTINFO>() as u32,
dwTime: 0
};
let p_last_input_info: PLASTINPUTINFO = &mut last_input_info as *mut LASTINPUTINFO;
let ok = unsafe { GetLastInputInfo(p_last_input_info) } != 0;
let logvar = match ok {
true => {
let millis = now - last_input_info.dwTime;
Ok(std::time::Duration::from_millis(millis as u64))
},
false => Err(format!("GetLastInputInfo failed"))
}.unwrap();
println!("{:?}", logvar);
sleep(1000);
};
}
我认为可能是某个程序阻止了电脑进入空闲状态,所以使用powercfg -requests,我发现一些音频流打开了(仍然不知道如何修复)。我只是不知道这是否是这里发生的事情。请求社区Maven!
2条答案
按热度按时间1yjd4xko1#
执行下面的cpp代码可能对检查问题有好处。它在我的电脑上运行得很好。
使用鼠标移动和停止在我PC中输出
pbpqsu0x2#
我已经找到了罪魁祸首。根本不是生 rust 的代码,而是我的游戏控制器驱动程序注册为输入。出于某种原因,每当我连接游戏控制器时,它就会这样做。我花了很长时间才弄明白,即使如此,在谷歌搜索了几周后,我还是偶然发现了答案。这个问题就这么结束了。