A very simple Stopwatch for the command line
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

31 lines
847 B

5 years ago
  1. //! stopwatch is a simple CLI stopwatch
  2. use crossbeam_channel::tick;
  3. use std::io::{stdout, Write};
  4. use std::time::{Duration, Instant};
  5. #[macro_use]
  6. extern crate crossbeam_channel;
  7. fn main() {
  8. let out = stdout();
  9. let mut out = out.lock();
  10. // 30 fps should be enough
  11. let step_duration = Duration::from_millis(1000 / 30);
  12. let start = Instant::now();
  13. let ticker = tick(step_duration);
  14. loop {
  15. select! {
  16. recv(ticker) -> now => {
  17. let elapsed = now.unwrap().duration_since(start);
  18. let secs = elapsed.as_secs();
  19. let millis = elapsed.subsec_millis();
  20. write!(out, "\r[2K").unwrap();
  21. write!(out, "{:02}:{:02}:{:03}", secs/60, secs % 60, millis).unwrap();
  22. out.flush().unwrap();
  23. }
  24. }
  25. }
  26. }