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});
}