Sleep y Temporizadores
time_ms() retorna la hora actual del reloj de pared en milisegundos como int. Restar dos lecturas da una duración transcurrida. sleep(ms) suspende el hilo actual por la cantidad de milisegundos especificada.
Código
// Timer y sleep: medir tiempo transcurrido con time_ms() y pausar con sleep()
fn main() -> int {
print("start")
let t0: int = time_ms()
// Pausar 500 milisegundos
sleep(500)
let t1: int = time_ms()
let elapsed: int = t1 - t0
print("500ms passed")
print("tiempo real: " + int_to_string(elapsed) + "ms")
// Medir una operacion costosa
let t2: int = time_ms()
var suma: int = 0
var i: int = 0
while i < 1000000 {
suma = suma + i
i = i + 1
}
let t3: int = time_ms()
let dur: int = t3 - t2
print("suma de 0..1M = " + int_to_string(suma))
print("duracion loop: " + int_to_string(dur) + "ms")
return 0
}
Salida
start 500ms passed tiempo real: 500ms suma de 0..1M = 499999500000 duracion loop: 0ms
Explicación
time_ms() es un envoltorio liviano sobre el reloj del sistema, que retorna una marca de tiempo monotónica en milisegundos adecuada para medir duraciones. Tomar la diferencia t1 - t0 después de un sleep(500) debería producir un valor igual o apenas por encima de 500, dependiendo de la precisión del planificador del sistema operativo.
La segunda medición envuelve un loop ajustado que suma enteros de 0 a 999 999. El resultado — 499 999 500 000 — es la suma estándar de la serie aritmética n*(n-1)/2 para n = 1 000 000. La duración se redondea a 0ms porque LLVM optimiza el loop de forma agresiva al momento de generar código nativo.
Tanto time_ms como sleep son funciones integradas disponibles sin necesidad de ningún import. Están implementadas en el módulo time.c del runtime y se mapean directamente a clock_gettime(CLOCK_MONOTONIC) y nanosleep en Linux.