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}