如何在程序退出D之前运行某些代码/功能?

时间:2016-08-16 15:32:55

标签: d exit exit-code

假设我有等待用户输入的循环。如果用户按Ctrl + C,程序将正常退出。但是,在退出之前我想做几件事。一旦按下Ctrl + C并且程序即将退出,是否可以运行一个功能?

2 个答案:

答案 0 :(得分:5)

您可以使用core.stdc.signal,其中包含与C标头signal.h的绑定。现在,如果这是针对Windows的,则可能会遇到一些problems

  

任何Win32应用程序都不支持SIGINT。当一个   发生CTRL + Cinterrupt,Win32操作系统生成一个新线程   专门处理那个中断。这可能会导致单线程   应用程序,例如UNIX中的应用程序,成为多线程和原因   出乎意料的行为。

__gshared bool running = true;
extern(C) void handleInterrupt(int) nothrow @nogc
{
    running = false;
}

void main()
{
    import core.stdc.signal;
    signal(SIGINT, &handleInterrupt);

    scope(exit)
    {
        //Cleanup
        import std.stdio : writeln;
        writeln("Done");
    }

    while(running)
    {
        //Do some work
    }
}

答案 1 :(得分:1)

你可能会逃避这样的事情:

void main() {
    try {
        dostuff();
    } finally {
        printf("bye\n");
    };
};

即使dostuff()引发ErrorThrowable,也会运行finally块。我对标准IO,控制台信号或其他任何东西都不是很熟悉,但至少要尝试一下。

此外,即使dostuff()调用Runtime.terminate(),finally块仍会运行。尽管如此,abort()不能说同样的事情。