breakout/
breakout.rs

1// Application-defined termination signal.
2
3use std::sync::Arc;
4
5use parking_lot::{Condvar, Mutex};
6
7
8#[derive(Debug, Default)]
9struct ReadWrite {
10  term: bool
11}
12
13#[derive(Debug, Default)]
14struct Shared {
15  rw: Mutex<ReadWrite>,
16  signal: Condvar
17}
18
19fn main() {
20  //
21  // Initialize signal handler
22  //
23  let _ = simple_sigh::init();
24
25  //
26  // Prepare shared state
27  //
28  let sh = Shared::default();
29  let sh = Arc::new(sh);
30
31  //
32  // Set a signal handler callback
33  //
34  let sh2 = Arc::clone(&sh);
35  #[allow(clippy::significant_drop_tightening)]
36  simple_sigh::register(move |_| {
37    println!("Received signal");
38    let mut g = sh2.rw.lock();
39    g.term = true;
40    sh2.signal.notify_one();
41  })
42  .unwrap();
43
44  //
45  // Wait until abort
46  //
47  println!("Wait for interrupt/termination signal..");
48  let mut g = sh.rw.lock();
49  while !g.term {
50    sh.signal.wait(&mut g);
51  }
52  println!("Bye!");
53}
54
55// vim: set ft=rust et sw=2 ts=2 sts=2 cinoptions=2 tw=79 :