有没有办法在一次又一次的特定时间或间隔中以生锈,线程为最佳状态运行任务?
这样我可以每隔5分钟或每天12点钟运行我的功能。
在Java中有TimerTask,所以我正在寻找类似的东西。
答案 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()
}
}