在程序退出D之前,如何运行某些代码/函数?

在程序退出D之前,如何运行某些代码/函数?,d,exit,exit-code,D,Exit,Exit Code,假设我有一个等待用户输入的循环。如果用户按Ctrl+C,程序将正常退出。然而,我想在退出之前做几件事。当按下Ctrl+C并且程序即将退出时,是否可以运行函数?您可能会遇到如下情况: void main(){ 试一试{ dostuff(); }最后{ printf(“再见”); }; }; 即使dostuff()抛出错误或Throwable,finally块仍将运行。我不太熟悉标准IO、控制台信号或任何东西,但至少可以尝试一下 此外,即使dostuff()调用Runtime.terminate(

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

您可能会遇到如下情况:

void main(){
试一试{
dostuff();
}最后{
printf(“再见”);
};
};
即使
dostuff()
抛出
错误
Throwable
,finally块仍将运行。我不太熟悉标准IO、控制台信号或任何东西,但至少可以尝试一下


此外,即使
dostuff()
调用
Runtime.terminate()
最终块仍将运行。但是,
abort()
的情况就不一样了。

您可能会得到这样的结果:

void main(){
试一试{
dostuff();
}最后{
printf(“再见”);
};
};
即使
dostuff()
抛出
错误
Throwable
,finally块仍将运行。我不太熟悉标准IO、控制台信号或任何东西,但至少可以尝试一下


此外,即使
dostuff()
调用
Runtime.terminate()
最终块仍将运行。但是,
abort()
就不是这样了。

您可以使用
core.stdc.signal
,它包含到C头
signal.h
的绑定。现在,如果这是针对Windows的,您可能会遇到以下问题:

任何Win32应用程序都不支持SIGINT。当 CTRL+Cinterrupt发生时,Win32操作系统将生成一个新线程 专门处理那个中断。这可能会导致单线程 应用程序(如UNIX中的应用程序)变为多线程并导致 意外的行为

\uu gshared bool running=true;
外部(C)无效手动中断(int)nogc的nothrow
{
运行=错误;
}
void main()
{
导入core.stdc.signal;
信号(SIGINT和HANDLEINTERRUP);
范围(退出)
{
//清理
导入标准stdio:writeln;
书面形式(“完成”);
}
(跑步时)
{
//做些工作
}
}

您可以使用
core.stdc.signal
,它包含到C头
signal.h
的绑定。现在,如果这是针对Windows的,您可能会遇到以下问题:

任何Win32应用程序都不支持SIGINT。当 CTRL+Cinterrupt发生时,Win32操作系统将生成一个新线程 专门处理那个中断。这可能会导致单线程 应用程序(如UNIX中的应用程序)变为多线程并导致 意外的行为

\uu gshared bool running=true;
外部(C)无效手动中断(int)nogc的nothrow
{
运行=错误;
}
void main()
{
导入core.stdc.signal;
信号(SIGINT和HANDLEINTERRUP);
范围(退出)
{
//清理
导入标准stdio:writeln;
书面形式(“完成”);
}
(跑步时)
{
//做些工作
}
}

您使用的是Windows还是Linux?(或其他)你是在Windows还是Linux上?(或其他)在Linux上不起作用,默认情况下ctrl+c会绕过异常机制。但在Linux上不起作用,默认情况下ctrl+c会绕过异常机制。演示如何在Windows上执行此操作。好答案,顺便说一句!演示如何在Windows上执行此操作。好答案,顺便说一句!