你能告诉我如何在 rust 里使用计时器吗?

zdwk9cvp  于 2023-02-23  发布在  其他
关注(0)|答案(3)|浏览(344)

你能告诉我如何在 rust 中使用计时器吗?我需要它在进入循环后的一定时间后关闭,使用break。
我用了这个,但它是必要的不是在开始后,而是在进入周期后。

use std::time::{Duration, Instant};

fn main() {
    let seconds = Duration::from_secs(5);  

    let start = Instant::now();
    loop {
       

        if Instant::now() - start >= seconds { 
            return;  
        }
    }
}
ssgvzors

ssgvzors1#

使用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;
            }
            _ => (),
        }
    }
}
7nbnzgx9

7nbnzgx92#

我需要它在进入循环后一定时间后关闭,使用break。
我不太清楚你的意思,但是如果你想在每次循环迭代中暂停程序的执行5秒钟,可以使用thread::sleep函数,如下所示:

use std::time::{Duration, Instant};
use std::thread;

fn main() {
    let seconds = Duration::from_secs(5);  
    
    let start = Instant::now();
    loop {
        thread::sleep(seconds.clone()); // waits 5 seconds
        
        assert!(Instant::now() - start >= seconds);
        
        return;
    }
}

Playground.

c3frrgcw

c3frrgcw3#

要在Rust中测量时间,需要Instant的方法elapsed,它返回DurationDuration有几个方法可以转换为秒、毫秒、纳秒。
示例:

use std::time::{Duration, Instant};

let start = Instant::now();

while start.elapsed().as_secs() < 5 {
    // your code
}

相关问题