zigar.thread.WorkQueue(ns).deinitAsync(self, promise) - chung-leong/zigar GitHub Wiki
Shutdown the work queue, terminating worker threads and freeing memory used. Resolve the given promise when the process is complete.
Usage
const std = @import("std");
const zigar = @import("zigar");
var work_queue: zigar.thread.WorkQueue(ns) = .{};
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
const allocator = gpa.allocator();
pub fn startup(num_threads: usize) !void {
try work_queue.init(.{
.allocator = allocator,
.n_jobs = num_threads,
.thread_start_params = .{ allocator, 1234, "Rats live on no evil star" },
.thread_end_params = .{allocator},
});
}
pub fn shutdown(promise: zigar.function.Promise(void)) !void {
work_queue.deinitAsync(promise);
}
pub fn print(promise: zigar.function.PromiseOf(ns.print)) !void {
try work_queue.push(ns.print, .{}, promise);
}
const ns = struct {
threadlocal var text: []const u8 = undefined;
pub fn onThreadStart(a: std.mem.Allocator, number: i32, string: []const u8) !void {
text = try std.fmt.allocPrint(a, "number = {d}, string = {s}", .{ number, string });
}
pub fn onThreadEnd(a: std.mem.Allocator) void {
a.free(text);
}
pub fn print() void {
std.debug.print("{s}\n", .{text});
}
};
import { print, startup, shutdown } from './work-queue-example-3.zig';
startup(4);
await print();
await shutdown();
number = 1234, string = Rats live on no evil star
Arguments:
self
:@This()
promise
:?Promise(void)
Return value:
void