How do I properly exit from a D program (outside main)?
H. S. Teoh via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Sep 15 16:50:34 PDT 2014
On Mon, Sep 15, 2014 at 11:36:54PM +0000, AsmMan via Digitalmars-d-learn wrote:
> Someone said somewhere that call std.c.process.exit() isn't the proper
> way to exit from a D program since it doesn't terminate some phobos
> stuff. So what should I use instead of? or there's no a replacement?
AFAIK, there is currently no replacement. I personally use an
ExitException and put a catch block in main():
class ExitException : Exception {
int status;
this(int _status=0, string file=__FILE__, size_t
line=__LINE__)
{
super("Program exit", file, line);
status = _status;
}
}
void exit(int status=0) {
throw new ExitException(status);
}
...
int main() {
try {
...
} catch(ExitException e) {
return e.status;
}
return 0;
}
The catch is that this may or may not work correctly in multithreaded
programs, because the exception may happen in a different thread than
the one main() is running in, and there isn't any nice way to terminate
other still-running threads after catching such an exception.
There has some discussion as to how to implement this, but AFAIK no good
solution was found. See also:
https://issues.dlang.org/show_bug.cgi?id=3462
But at least, for single-threaded programs, the above ExitException
should work reasonably well.
T
--
Almost all proofs have bugs, but almost all theorems are true. -- Paul Pedersen
More information about the Digitalmars-d-learn
mailing list