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 library itself.
Zig › std/ › Io/ › Dispatch.zig › sleep
sleep
Dispatch.sleep
fn sleep (userdata : ?*anyopaque , timeout : Io .Timeout ) Io .Cancelable !void
File
Code
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 = &Futex .Waiter .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 );
}