rust 每秒执行一个函数

r3i60tvu  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(117)
use std::time::{Instant, Duration};

fn main() {
    let mut lastsec = Instant::now();

    loop {
        if Instant::now() - lastsec >= Duration::from_secs(1) {
            dostuff();
            lastsec = Instant::now();
        }
    }
}

fn dostuff() {
    println!("Performing action...");
}

字符串
这段Rust代码应该每秒执行一次dostuff()函数。但是它根本不执行它。我不使用sleep的原因是因为我需要在这个循环中以比每秒一次更快的速度做其他事情。

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

fn main() {
    let mut lastsec = Instant::now();

    loop {
        if Instant::now() - lastsec >= Duration::from_secs(1) {
            dostuff();
        }
    }
}

fn dostuff() {
    println!("Performing action...");
}


这个稍微改变了的版本,我删除了重新分配lastsec = Instant::now();,可以按预期工作。它等待一秒钟,然后开始在每次循环迭代中调用dostuff()

anhgbhbe

anhgbhbe1#

与其不断地查询经过的时间,不如在每个循环示例结束时尝试 sleeping。使用std::thread中的sleep重写循环:

函数std::thread::sleep

将当前线程置于睡眠状态至少指定的时间。
示例如下:

use std::thread::sleep;
use std::time::Duration;

loop {
    dostuff();

    sleep(Duration::from_secs(1));
}

字符串
虽然这并不能保证每次调用dostuff都间隔一秒,但它确实会在函数的返回和后续调用之间等待一秒。
请注意,这个答案使用了不同的方法来避免busy-waiting,这可能是不可取的。

相关问题