simple/
simple.rs

1extern crate better_graceful;
2
3use std::sync::atomic::{AtomicBool, Ordering};
4
5use better_graceful::SignalGuard;
6use std::thread;
7use std::time::Duration;
8
9#[macro_use]
10extern crate lazy_static;
11
12lazy_static! {
13  static ref STOP: AtomicBool = AtomicBool::new(false);
14}
15
16fn main() {
17  let signal_guard = SignalGuard::new();
18
19  let handle = thread::spawn(|| {
20    println!("Worker thread started. Type Ctrl+C to stop.");
21    while !STOP.load(Ordering::Acquire) {
22      println!("working...");
23      thread::sleep(Duration::from_millis(500));
24    }
25    println!("Bye.");
26  });
27
28  signal_guard.at_exit(move |sig| {
29    println!("Signal {} received.", sig);
30    STOP.store(true, Ordering::Release);
31    handle.join().unwrap();
32  });
33}