1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use interval_task::{
    channel::{self, TASK_DONE},
    runner::ExternalRunnerExt,
};
use std::time::{Duration, Instant};

fn main() {
    println!("blocking:");
    blocking();
    println!("no blocking:");
    no_blocking();
}

fn blocking() {
    let (s, r, mut runner) = channel::new_blocking(Duration::from_micros(1_000_000 / 120));
    runner.start().unwrap();
    let start = Instant::now();
    for _ in 0..120 {
        r.recv_blocking().unwrap();
        s.send_blocking(TASK_DONE).unwrap();
    }
    println!("Elapsed: {:?}", start.elapsed());
    runner.close().unwrap();
}

fn no_blocking() {
    let (r, mut runner) = channel::new(Duration::from_micros(1_000_000 / 120));
    runner.start().unwrap();
    let start = Instant::now();
    for _ in 0..120 {
        r.recv_blocking().unwrap();
    }
    println!("Elapsed: {:?}", start.elapsed());
    runner.close().unwrap();
}