Function schedule_interval

Source
pub fn schedule_interval<'h, F>(
    interval: Duration,
    hint: Option<CallbackHint>,
    handler: F,
) -> Result<Timer<'h>>
where F: FnMut() + Send + '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}