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 inns. args:std.meta.ArgsTuple(@TypeOf(func))Tuple holding arguments forfunc.dest:?PromiseOf(func)or?GeneratorOf(func)OptionalPromiseorGeneratorstruct depending on whetherfuncreturns an iterator.
Return value:
error{OutOfMemory}!void
WorkQueue(ns) | PromiseOf(function) | GeneratorOf(function) | Iterator