On Monday, 15 September 2014 at 23:52:25 UTC, H. S. Teoh via
Digitalmars-d-learn wrote:
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

Thanks! I'll use it.

Reply via email to