progress

thread safe progress bar and spinner library
git clone git://brookjeynes.dev/bjeynes/progress.git
Log | Files | Refs | README | LICENSE

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 }