On Thu, Jun 26, 2014 at 01:23:17PM +0000, Chris Nicholson-Sauls via 
Digitalmars-d-learn wrote:
> On Thursday, 26 June 2014 at 11:07:37 UTC, Rene Zwanenburg wrote:
> >
> >They won't. Same for module destructors.
> >
> >If you need those to work, another option is to throw some custom
> >Exception type which is only caught in main.
> 
> I really wish this wasn't the answer, but for some programs I've had
> to resort to it myself.  For at least one I've defined an Exception
> type that carries a status code payload to be returned by main.  D
> needs its own exit().

I've done the same for my own programs:

        class ExitException : Exception
        {
                int status;
                this(int _status, string file=__FILE__,
                        size_t line=__LINE__)
                {
                        super(file,line);
                        status = _status;
                }
        }
        void exit(int status=0) {
                throw new ExitException(status);
        }
        int main(string[] args) {
                try {
                        ...
                        return 0;
                } catch(ExitException e) {
                        return e.status;
                } catch(Exception e) {
                        ... // real exception here
                        return 1;
                }
        }

It works reasonably well for single-threaded program, but as the
following bug states, there's no nice way to terminate a multithreaded
program:


> There's been this request in the bugzilla since 2009:
> https://issues.dlang.org/show_bug.cgi?id=3462

If you have any good ideas, please chime in on the bug report!


T

-- 
"I'm not childish; I'm just in touch with the child within!" - RL

Reply via email to