| //! Prints the elapsed time every 1 second and quits on Ctrl+C. |
| #[cfg(windows)] // signal_hook::iterator does not work on windows |
| println!("This example does not work on Windows"); |
| use std::time::{Duration, Instant}; |
| use crossbeam_channel::{bounded, select, tick, Receiver}; |
| use signal_hook::consts::SIGINT; |
| use signal_hook::iterator::Signals; |
| // Creates a channel that gets a message every time `SIGINT` is signalled. |
| fn sigint_notifier() -> io::Result<Receiver<()>> { |
| let (s, r) = bounded(100); |
| let mut signals = Signals::new(&[SIGINT])?; |
| for _ in signals.forever() { |
| // Prints the elapsed time. |
| println!("Elapsed: {}.{:03} sec", dur.as_secs(), dur.subsec_millis()); |
| let start = Instant::now(); |
| let update = tick(Duration::from_secs(1)); |
| let ctrl_c = sigint_notifier().unwrap(); |