zigar.thread.WorkQueue(ns).push(self, func, args, dest) ᴾᴴᴾ - chung-leong/zigar GitHub Wiki

JavaScript | PHP


Push a work item onto the queue to be be worked on by the first available worker thread.

If the work queue has not yet been initialized, it'll be initialized with a single thread and its allocator set to either std.heap.c_allocator or std.heap.wasm_allocator.

You usually don't need to use this function. You can use promisify() to more easily define new functions that performs the push operations.

Usage

const std = @import("std");

const zigar = @import("zigar");

var work_queue: zigar.thread.WorkQueue(worker) = .{};

pub const shutdown = work_queue.promisify(.shutdown);
pub const getOneNumber = work_queue.promisify(worker.getOneNumber);
pub const getMultipleNumbers = work_queue.asyncify(worker.getMultipleNumbers);

const worker = struct {
    pub fn getOneNumber() i32 {
        return 1234;
    }

    pub fn getMultipleNumbers() NumberIterator {
        return NumberIterator{ .current = 7, .last = 10 };
    }

    const NumberIterator = struct {
        current: i32,
        last: i32,

        pub fn next(self: *@This()) ?i32 {
            if (self.current <= self.last) {
                defer self.current += 1;
                return self.current;
            } else return null;
        }
    };
};
<?php

$m = zigar_use(__DIR__ . '/work-queue-example-6.zig');

try {
    $number = $m->getOneNumber();
    echo "One number: $number\n";
    echo "Multiple numbers:\n";
    foreach ($m->getMultipleNumbers() as $number) {
        echo "$number\n";
    }
} finally {
    $m->shutdown();
}
One number: 1234
Multiple numbers:
7
8
9
10

Arguments:

  • self: @This()
  • comptime func: anytype
    A public function in ns.
  • args: std.meta.ArgsTuple(@TypeOf(func)) Tuple holding arguments for func.
  • dest: ?PromiseOf(func) or ?GeneratorOf(func) Optional Promise or Generator struct depending on whether func returns an iterator.

Return value:

error{OutOfMemory}!void


WorkQueue(ns) | PromiseOf(function) | GeneratorOf(function) | Iterator