How do I properly exit from a D program (outside main)?

AsmMan via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Sep 15 17:08:59 PDT 2014


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.


More information about the Digitalmars-d-learn mailing list