std.Io.Clock 从选定的时钟获取时间戳。直接休眠使用 std.Io.sleep(io, duration, clock);当一个操作需要等待上限时,使用 std.Io.Timeout,它可以表示无超时、持续时间或截止时间,并通过 timeout.sleep(io) 执行等待。本例比较了直接 sleep 和 timeout sleep, 并测量两次实际等待时间。
//! Measure time and bound a wait with std.Io.Clock and std.Io.Timeout.
const std = @import("std");
pub fn main(init: std.process.Init) !void {
const io = init.io;
const sleep_duration = std.Io.Duration.fromNanoseconds(5 * std.time.ns_per_ms);
const direct_start = std.Io.Clock.now(.awake, io);
try std.Io.sleep(io, sleep_duration, .awake);
const direct_elapsed = direct_start.durationTo(std.Io.Clock.now(.awake, io));
const timeout: std.Io.Timeout = .{ .duration = .{
.clock = .awake,
.raw = sleep_duration,
} };
const timeout_start = std.Io.Clock.now(.awake, io);
try timeout.sleep(io);
const timeout_elapsed = timeout_start.durationTo(std.Io.Clock.now(.awake, io));
std.debug.print("direct sleep: {d} ns\n", .{direct_elapsed.nanoseconds});
std.debug.print("timeout sleep: {d} ns\n", .{timeout_elapsed.nanoseconds});
}