假设我有等待用户输入的循环。如果用户按Ctrl + C,程序将正常退出。但是,在退出之前我想做几件事。一旦按下Ctrl + C并且程序即将退出,是否可以运行一个功能?
答案 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()
引发Error
或Throwable
,也会运行finally块。我对标准IO,控制台信号或其他任何东西都不是很熟悉,但至少要尝试一下。
此外,即使dostuff()
调用Runtime.terminate()
,finally块仍会运行。尽管如此,abort()
不能说同样的事情。