有没有办法在特定时间或间隔安排任务?

时间:2015-02-06 11:40:36

标签: timer task rust scheduler

有没有办法在一次又一次的特定时间或间隔中以生锈,线程为最佳状态运行任务?

这样我可以每隔5分钟或每天12点钟运行我的功能。

在Java中有TimerTask,所以我正在寻找类似的东西。

2 个答案:

答案 0 :(得分:3)

您可以使用Timer::periodic创建定期发送消息的频道,例如

use std::old_io::Timer;

let mut timer = Timer::new().unwrap();
let ticks = timer.periodic(Duration::minutes(5));
for _ in ticks.iter() {
    your_function();
}

Receiver::iter阻塞,等待下一条消息,这些消息相隔5分钟,因此for循环的主体以这些定期间隔运行。 NB。这将使用整个线程用于该单个函数,但我相信通过创建多个定时器通道并使用select!来确定下一个应该执行的函数,可以推广到具有不同间隔的任何固定数量的函数。

我很确定使用当前的标准库无法正确地在指定时间每天运行。例如。使用简单的Timer::periodic(Duration::days(1))将无法处理系统时钟更改,例如当用户移动时区,或进入/退出夏令时。

答案 1 :(得分:1)

最新的Rust nightly-version:

use std::old_io::Timer;
use std::time::Duration;

let mut timer1 = Timer::new().unwrap();
let mut timer2 = Timer::new().unwrap();
let tick1 = timer1.periodic(Duration::seconds(1));
let tick2 = timer2.periodic(Duration::seconds(3));

loop {
    select! {
        _ = tick1.recv() => do_something1(),
        _ = tick2.recv() => do_something2()
    }
}