On Wednesday, 1 July 2020 at 07:52:28 UTC, AB wrote:
Hello. I am unsure how to proceed about printing progress in my program.
Is it a good idea to std.concurrency.spawn a new thread?..
This example code shows my situation:

    MmFile  input       = new MmFile(/* ... */);
    ulong   fileSize    = input.length;

    for (ulong i = 0; i < fileSize; ++i)
    {
        // ...
    }

If you can only update the progress between iterations I don't see why you would use threads here. A timer should suffice:

import std.datetime.stopwatch;

MmFile  input       = new MmFile(/* ... */);
ulong   fileSize    = input.length;
auto    sw          = StopWatch(AutoStart.yes);

for (ulong i = 0; i < fileSize; ++i)
{
      // ...
      if (sw.peek >= 2.seconds)
      {
          writefln("Progress: %5.2f%%", i*100.0/fileSize);
          sw.reset;
      }
}

Reply via email to