Можете ли вы сказать мне, как использовать таймер в Rust?

Можете ли вы сказать мне, как использовать таймер в 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;  
        }
    }
}

Это помогает? docs.rs/timer/latest/timer/struct.Timer.html

kometen 20.02.2023 14:58
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
2
1
50
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте 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;
            }
            _ => (),
        }
    }
}

Решение хорошее, но мне нужно замкнуть цикл, а не весь код.

Wiktor Kazmerchuk 20.02.2023 16:33

@WiktorKazmerchuk, вы написали return в своем примере кода, и возврат из main закрывает программу. Чтобы закрыть цикл, вам нужно использовать break вместо этого.

denis.peplin 20.02.2023 16:43

Другие вопросы по теме