another_rxrust/schedulers/
default_scheduler.rs

1use super::scheduler::IScheduler;
2
3#[derive(Clone)]
4pub struct DefaultScheduler {}
5
6impl DefaultScheduler {
7  pub fn new() -> DefaultScheduler {
8    DefaultScheduler {}
9  }
10}
11
12impl IScheduler<'_> for DefaultScheduler {
13  fn post<F>(&self, f: F)
14  where
15    F: Fn() + Send + Sync,
16  {
17    f();
18  }
19  fn abort(&self) {}
20}
21
22pub fn default_scheduler() -> fn() -> DefaultScheduler {
23  || DefaultScheduler::new()
24}
25
26#[cfg(test)]
27mod test {
28  use crate::prelude::*;
29  use scheduler::IScheduler;
30  use std::{thread, time};
31
32  #[test]
33  fn basic() {
34    {
35      let s = schedulers::default_scheduler()();
36
37      s.post(|| {
38        println!("#1 start");
39        thread::sleep(time::Duration::from_millis(500));
40        println!("#1 end");
41      });
42
43      s.post(|| {
44        println!("#2 start");
45        thread::sleep(time::Duration::from_millis(500));
46        println!("#2 end");
47      });
48
49      s.post(|| {
50        println!("#3 start");
51        thread::sleep(time::Duration::from_millis(500));
52        println!("#3 end");
53      });
54    }
55  }
56}