From 669659f9741ee46cb9e20bc01cf4544893ded265 Mon Sep 17 00:00:00 2001 From: Doru Date: Sat, 2 Mar 2024 17:03:56 -0300 Subject: [PATCH] Improve sleep resolution (#12049) # Description This improves the resolution of the sleep commands by simply not clamping to the default 100ms ctrl+c signal checking loop if the passed-in duration is shorter. # User-Facing Changes You can use smaller values in sleep. ``` # Before timeit { 0..100 | each { |row| print $row; sleep 10ms; } } # +10sec # After timeit { 0..100 | each { |row| print $row; sleep 10ms; } } # +1sec ``` It still depends on the internal behavior of thread::sleep and the OS timers. In windows it doesn't seem to go much lower than 15 or 10ms, or 0 if you asked for that. # After Submitting Sleep didn't have anything documenting its minimum value, so this should be more in line with its standard procedure. It will still never sleep for less time than allocated. Did you know `sleep` can take multiple durations, and it'll add them up? I didn't --- crates/nu-command/src/platform/sleep.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/nu-command/src/platform/sleep.rs b/crates/nu-command/src/platform/sleep.rs index a3e352a565..37e23d1caa 100644 --- a/crates/nu-command/src/platform/sleep.rs +++ b/crates/nu-command/src/platform/sleep.rs @@ -56,7 +56,7 @@ impl Command for Sleep { let ctrlc_ref = &engine_state.ctrlc.clone(); let start = Instant::now(); loop { - thread::sleep(CTRL_C_CHECK_INTERVAL); + thread::sleep(CTRL_C_CHECK_INTERVAL.min(total_dur)); if start.elapsed() >= total_dur { break; }