Rust有相当于Python的线程.Timer吗?

时间:2016-05-03 16:28:49

标签: timer rust

我正在寻找一个使用线程的计时器,而不是普通的time.sleep

from threading import Timer

def x():
    print "hello"
    t = Timer(2.0, x)
    t.start()

t = Timer(2.0, x)
t.start()

2 个答案:

答案 0 :(得分:7)

您可以使用timer crate

enterNestedEventLoop

答案 1 :(得分:5)

仅使用标准库中的工具自行编写类似版本很容易:

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

struct Timer<F> {
    delay: Duration,
    action: F,
}

impl<F> Timer<F>
where
    F: FnOnce() + Send + Sync + 'static,
{
    fn new(delay: Duration, action: F) -> Self {
        Timer { delay, action }
    }

    fn start(self) {
        thread::spawn(move || {
            thread::sleep(self.delay);
            (self.action)();
        });
    }
}

fn main() {
    fn x() {
        println!("hello");
        let t = Timer::new(Duration::from_secs(2), x);
        t.start();
    }

    let t = Timer::new(Duration::from_secs(2), x);
    t.start();

    // Wait for output
    thread::sleep(Duration::from_secs(10));
}

作为pointed out by malbarbo,这确实为每个计时器创建了一个新线程。这可能比重用线程的解决方案更昂贵,但这是一个非常简单的例子。