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

//! stopwatch is a simple CLI stopwatch
use crossbeam_channel::tick;
use std::io::{stdout, Write};
use std::time::{Duration, Instant};
#[macro_use]
extern crate crossbeam_channel;
fn main() {
let out = stdout();
let mut out = out.lock();
// 30 fps should be enough
let step_duration = Duration::from_millis(1000 / 30);
let start = Instant::now();
let ticker = tick(step_duration);
loop {
select! {
recv(ticker) -> now => {
let elapsed = now.unwrap().duration_since(start);
let secs = elapsed.as_secs();
let millis = elapsed.subsec_millis();
write!(out, "\r[2K").unwrap();
write!(out, "{:02}:{:02}:{:03}", secs/60, secs % 60, millis).unwrap();
out.flush().unwrap();
}
}
}
}