Можете ли вы сказать мне, как использовать таймер в Rust? Мне нужно, чтобы он закрылся через определенное время после входа в цикл, используйте разрыв.
Я этим пользовался, но надо не после старта, а после входа в цикл.
use std::time::{Duration, Instant};
fn main() {
let seconds = Duration::from_secs(5);
let start = Instant::now();
loop {
if Instant::now() - start >= seconds {
return;
}
}
}
Используйте SystemTime::now()
.
Пример из документации SystemTime:
use std::time::{Duration, SystemTime};
use std::thread::sleep;
fn main() {
let now = SystemTime::now();
// we sleep for 2 seconds
sleep(Duration::new(2, 0));
match now.elapsed() {
Ok(elapsed) => {
// it prints '2'
println!("{}", elapsed.as_secs());
}
Err(e) => {
// an error occurred!
println!("Error: {e:?}");
}
}
}
И ваш код может выглядеть так
use std::time::{Duration, SystemTime};
fn main() {
let seconds = Duration::from_secs(5);
let start = SystemTime::now();
loop {
// Делаем что-то.
std::thread::sleep(Duration::new(2, 0));
match start.elapsed() {
Ok(elapsed) if elapsed > seconds => {
return;
}
_ => (),
}
}
}
Решение хорошее, но мне нужно замкнуть цикл, а не весь код.
@WiktorKazmerchuk, вы написали return
в своем примере кода, и возврат из main
закрывает программу. Чтобы закрыть цикл, вам нужно использовать break
вместо этого.
Это помогает? docs.rs/timer/latest/timer/struct.Timer.html