diff options
author | Aman Gupta <aman@tmm1.net> | 2015-09-30 19:02:23 -0700 |
---|---|---|
committer | Aman Gupta <aman@tmm1.net> | 2015-09-30 19:02:23 -0700 |
commit | 9f33baf51b24049f8ead63a8dd7a58db6ef0e490 (patch) | |
tree | 32fd0d3cd1f46699ac6424d786f2a0f4dfab4341 /lib | |
parent | 2d2f152e3c66af45d262e9ba72f69e67a829c66a (diff) | |
download | Nim-9f33baf51b24049f8ead63a8dd7a58db6ef0e490.tar.gz |
add afterRunEvent callback to execProcesses
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pure/osproc.nim | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/pure/osproc.nim b/lib/pure/osproc.nim index bc73f7119..c23126be9 100644 --- a/lib/pure/osproc.nim +++ b/lib/pure/osproc.nim @@ -248,7 +248,8 @@ proc countProcessors*(): int {.rtl, extern: "nosp$1".} = proc execProcesses*(cmds: openArray[string], options = {poStdErrToStdOut, poParentStreams}, n = countProcessors(), - beforeRunEvent: proc(idx: int) = nil): int + beforeRunEvent: proc(idx: int) = nil, + afterRunEvent: proc(idx: int, p: Process) = nil): int {.rtl, extern: "nosp$1", tags: [ExecIOEffect, TimeEffect, ReadEnvEffect, RootEffect]} = ## executes the commands `cmds` in parallel. Creates `n` processes @@ -278,6 +279,7 @@ proc execProcesses*(cmds: openArray[string], err.add("\n") echo(err) result = max(waitForExit(q[r]), result) + if afterRunEvent != nil: afterRunEvent(r, q[r]) if q[r] != nil: close(q[r]) if beforeRunEvent != nil: beforeRunEvent(i) @@ -291,6 +293,7 @@ proc execProcesses*(cmds: openArray[string], if not running(q[r]): #echo(outputStream(q[r]).readLine()) result = max(waitForExit(q[r]), result) + if afterRunEvent != nil: afterRunEvent(r, q[r]) if q[r] != nil: close(q[r]) if beforeRunEvent != nil: beforeRunEvent(i) @@ -299,6 +302,7 @@ proc execProcesses*(cmds: openArray[string], if i > high(cmds): break for j in 0..m-1: result = max(waitForExit(q[j]), result) + if afterRunEvent != nil: afterRunEvent(j, q[j]) if q[j] != nil: close(q[j]) else: for i in 0..high(cmds): @@ -306,6 +310,7 @@ proc execProcesses*(cmds: openArray[string], beforeRunEvent(i) var p = startProcess(cmds[i], options=options + {poEvalCommand}) result = max(waitForExit(p), result) + if afterRunEvent != nil: afterRunEvent(i, p) close(p) proc select*(readfds: var seq[Process], timeout = 500): int {.benign.} |