pub fn schedule_interval<'h, F>(
interval: Duration,
hint: Option<CallbackHint>,
handler: F,
) -> Result<Timer<'h>>
Expand description
Schedule an interval task on the default TimerQueue
.
The function interval
cannot be negative (it will be converted to u32
). CallbackHint
gives the OS scheduler some hint about the callback
behavior. For example, if the handler takes long time to finish, the caller should hint with CallbackHint::SlowFunction
. If no hint is specified,
it’s up to the scheduler to decide.
Following example doesn’t give a hint.
let mut count = 0;
let t = schedule_interval(Duration::from_millis(200), None, || count += 1);
sleep(Duration::from_millis(500));
drop(t);
assert_eq!(count, 2);
Examples found in repository?
src/examples/simple.rs (line 6)
5fn main() {
6 let t1 = schedule_interval(Duration::from_secs(1), None, || println!("Tick!")).unwrap();
7 let t2 = schedule_interval(Duration::from_secs(1), Some(CallbackHint::QuickFunction), || println!("Tick fast!")).unwrap();
8 let t3 = schedule_oneshot(Duration::from_millis(800), Some(CallbackHint::QuickFunction), || println!("One shot!")).unwrap();
9
10 let mut lazy_count = 0;
11 let t4 = schedule_interval(Duration::from_secs(1), Some(CallbackHint::SlowFunction(Duration::from_secs(5))), || {
12 lazy_count += 1;
13 let my_id = lazy_count;
14 println!("I'm lazy... #{my_id}");
15 sleep(Duration::from_secs(3));
16 println!("#{my_id} I may have been called with a dedicated thread");
17 }).unwrap();
18
19 println!("Wait for timer working");
20 sleep(Duration::from_secs(5));
21
22 println!("Dropping timers");
23
24 // Note that every dropping will block the thread because dropping timer needs to ensure the execution of timer function.
25 drop(t1);
26 drop(t2);
27 drop(t3);
28 drop(t4);
29
30 println!("That's it!");
31}