multibar-static.zig (1529B)
1 const std = @import("std"); 2 const progress = @import("progress"); 3 const MultiBar = progress.MultiBar.MultiBar; 4 5 pub fn threadWorker(manager: *MultiBar, index: usize, seed: usize) !void { 6 var rand_impl = std.Random.DefaultPrng.init(seed); 7 const delay = @mod(rand_impl.random().int(i64), 100) + 20; 8 9 const pb = try manager.bar(index); 10 11 while (!pb.isFinished()) { 12 pb.add(1); 13 try manager.render(); 14 15 try std.Io.sleep(manager.writer.io, std.Io.Duration.fromMilliseconds(delay), .awake); 16 } 17 } 18 19 pub fn main(init: std.process.Init) !void { 20 var stdout_buf: [4096]u8 = undefined; 21 var stdout_writer = std.Io.File.stdout().writer(init.io, &stdout_buf); 22 23 const num_bars = 5; 24 var desc_bufs: [num_bars][32]u8 = undefined; 25 var buf: [MultiBar.bufSize(num_bars)]u8 = undefined; 26 var fba = std.heap.FixedBufferAllocator.init(&buf); 27 28 var manager = MultiBar.init(fba.allocator(), &stdout_writer); 29 defer manager.deinit(); 30 31 for (0..num_bars) |i| { 32 const desc = try std.fmt.bufPrint(&desc_bufs[i], "Task {d}", .{i + 1}); 33 34 _ = try manager.addBar(100, .{ 35 .description = desc, 36 .show_percentage = true, 37 .write_newline_on_finish = false, 38 .clear_on_finish = true, 39 }); 40 } 41 42 var threads: [num_bars]std.Thread = undefined; 43 for (0..num_bars) |i| { 44 threads[i] = try std.Thread.spawn(.{}, threadWorker, .{ &manager, i, i * 100 }); 45 } 46 47 for (threads) |thread| { 48 thread.join(); 49 } 50 }