On 03/28/2014 10:19 AM, Sharad Gupta wrote:
On Friday, 28 March 2014 at 16:37:00 UTC, Vladimir Panteleev wrote:
On Friday, 28 March 2014 at 15:52:17 UTC, Sharad Gupta wrote:
I am trying to make a Utility which spwans=>pipeShell off multiple
processes on user choice.
On of the issues is that some process need to wait for other
processes to finish. Now I could implement it using messages but that
doesn't seem very nice solution. I could also wait for the pipeShell
pid but was wondering what is the standard or recommended way to wait
on a spawned process?
Calling wait on the Pid object returned by std.process functions is
the standard way to wait for a process to finish in D.
But I don't have a Pid object but instead have Tid object from the spawn
function in std.concurrency lib.
If you start the worker with spawnLinked then you will receive a
LinkTerminated message.
import std.stdio;
import std.concurrency;
import core.thread;
void main()
{
auto worker = spawnLinked(&workerFunc);
// Wait for worker to terminate
bool terminated = false;
while (!terminated) {
writeln("Waiting for the worker to terminate...");
terminated = receiveTimeout(1.seconds,
(LinkTerminated e) {
if (e.tid == worker) {
writefln("Terminated");
}
}
);
}
}
void workerFunc()
{
Thread.sleep(3.seconds);
}
Ali