Sha256: d02121258f08d56f1eb7997e19bcb9bacb6836cfa0abbba90a9e59d8a50ae5cf
Contents?: true
Size: 1.43 KB
Versions: 15
Compression:
Stored size: 1.43 KB
Contents
//! Prints the elapsed time every 1 second and quits on Ctrl+C. #[cfg(windows)] // signal_hook::iterator does not work on windows fn main() { println!("This example does not work on Windows"); } #[cfg(not(windows))] fn main() { use std::io; use std::thread; 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])?; thread::spawn(move || { for _ in signals.forever() { if s.send(()).is_err() { break; } } }); Ok(r) } // Prints the elapsed time. fn show(dur: Duration) { 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(); loop { select! { recv(update) -> _ => { show(start.elapsed()); } recv(ctrl_c) -> _ => { println!(); println!("Goodbye!"); show(start.elapsed()); break; } } } }
Version data entries
15 entries across 15 versions & 1 rubygems