zigar.function.AbortSignal ᴾᴴᴾ - chung-leong/zigar GitHub Wiki

JavaScript | PHP


Struct that acts as an interface to an AbortSignal object.

Usage

const std = @import("std");
const zigar = @import("zigar");

const Promise = zigar.function.Promise(error{Aborted}!void);

pub fn start() !void {
    try zigar.thread.use();
}

pub fn stop() void {
    zigar.thread.end();
}

pub fn idle(promise: Promise, signal: zigar.function.AbortSignal) !void {
    const thread = try std.Thread.spawn(.{}, spin, .{ promise, signal });
    thread.detach();
}

pub fn spin(promise: Promise, signal: zigar.function.AbortSignal) void {
    while (signal.off()) {}
    promise.resolve(error.Aborted);
}
<?php

require __DIR__ . '/vendor/autoload.php';

use Revolt\EventLoop;

ini_set('zigar.event_loop', 'revolt');

EventLoop::defer(function() {
    $m = zigar_use(__DIR__ . '/abort-signal-example-1.zig');
    try {
        $m->start();
        $signal = new AbortSignal();
        EventLoop::delay(0.2, function() use($signal) {
            $signal->abort();
        });
        $m->idle(signal: $signal);
    } catch (Exception $e) {
        echo $e->getMessage(), "\n";
    } finally {
        $m->stop();
    }
});
EventLoop::run();
aborted

Struct fields:

  • ptr: *const volatile i32

Functions:


Abort Signal