Zig 0.17.0-dev (Split by item) This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig standard library.
std › Io › Dispatch › sleep Private Function sleep Doc Source Private Function std.Io.Dispatch.sleep
fn sleep (userdata : ?*anyopaque , timeout : Io .Timeout ) Io .Cancelable !void Params userdata : ?*anyopaque timeout : Io .Timeout File Io/Dispatch.zig: 4704
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730 fn sleep (userdata : ?*anyopaque , timeout : Io .Timeout ) Io .Cancelable !void {
const ev : *Evented = @ptrCast (@alignCast (userdata ));
const queue = c .dispatch .queue_create_with_target (
"org.ziglang.std.Io.Dispatch.sleep" ,
.SERIAL (),
ev .queue ,
) orelse {
log .warn ("failed to create serial queue for sleep" , .{});
return ev .yield (.{ .after = ev .timeFromTimeout (timeout ) });
};
defer queue .as_object ().release ();
const timer = c .dispatch .source_create (.TIMER , 0 , .none , queue ) orelse {
log .warn ("failed to create timer for sleep" , .{});
return ev .yield (.{ .after = ev .timeFromTimeout (timeout ) });
};
var waiter : SleepWaiter = .{
.cancelable = .{ .queue = queue , .cancel = &SleepWaiter .canceled },
.timer = timer ,
};
timer .as_object ().set_context (&waiter );
timer .set_event_handler (&SleepWaiter .timedOut );
timer .set_cancel_handler (&SleepWaiter .wake );
timer .set_timer (ev .timeFromTimeout (timeout ), c .dispatch .TIME_FOREVER , ev .leeway );
ev .yield (.{ .sleep_wait = &waiter });
timer .as_object ().release ();
try waiter .cancelable .acknowledge (waiter .sleeper .fiber );
}