Dear All,
Does anyone have an implementation of a progress bar/message that works with spawn?
There's a progress module in nimble:
nimble install progress
Here's a (very crude) example of using it with spawn:
# https://github.com/euantorano/progress.nim
import os, strutils, progress, threadpool
const
dumpFileTargetMb = 20_000
dumpFileName = getTempDir() / "dumpfile.tmp"
dumpFileTargetBytes = dumpFileTargetMb * 1024 * 1024
proc prepare() =
discard tryRemoveFile(dumpFileName)
setControlCHook(
proc() {.noconv.} =
echo "\n\n Terminated! \n\n"
quit(1)
)
echo "Filling up $1 to $2mb..." % [dumpFileName, $dumpFileTargetMb]
proc createDumpFile() =
const
pageSize = 4096
buffer = ' '.repeat(pageSize)
pagesTotal = dumpFileTargetBytes div pageSize
var output = open(dumpFileName, fmWrite, pageSize)
for pageNum in 1..pagesTotal:
output.write buffer
output.flushFile
output.close
proc watchDumpFileGrow() =
var
bar = newProgressBar(dumpFileTargetBytes)
currentDumpFileBytes = 0
bar.start()
while true:
sleep(100)
try:
currentDumpFileBytes = getFileSize(dumpFileName).int
except OSError: continue
if currentDumpFileBytes >= dumpFileTargetBytes:
bar.finish()
break
else:
bar.set currentDumpFileBytes
when isMainModule:
prepare()
spawn createDumpFile()
watchDumpFileGrow()
# Or this should also work:
# spawn watchDumpFileGrow()
# createDumpFile()