【问题标题】:Can you tell me how to use a timer in Rust?你能告诉我如何在 Rust 中使用定时器吗?
【发布时间】:2023-02-20 22:32:40
【问题描述】:

你能告诉我如何在 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;  
        }
    }
}

【问题讨论】:

标签: rust timer


【解决方案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;
            }
            _ => (),
        }
    }
}

【讨论】:

    【解决方案2】:

    我需要它在进入循环后一定时间后关闭,使用 break。

    我不太确定你的意思。但是如果你想在每次循环迭代中暂停程序的执行五秒钟,你可以像这样使用 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.

    【讨论】:

      猜你喜欢
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      • 2021-03-09
      • 2021-06-27
      • 1970-01-01
      相关资源
      最近更新 更多