假设我有等待用户输入的循环。如果用户按下Ctrl + C,则程序正常退出。不过,我想在退出前做几件事情。一旦按下Ctrl + C并且程序即将退出,是否可以运行一个函数?如何在程序退出D之前运行某些代码/函数?
回答
您可以使用core.stdc.signal
,其中包含与C标头signal.h
的绑定。现在,如果这是针对Windows,则可能遇到一些问题problems:
对于任何Win32应用程序都不支持SIGINT。当一个 CTRL + C中断发生时,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
}
}
http://stackoverflow.com/questions/16826097/equivalent-to-sigint-posix-signal-for-catching-ctrlc-under-windows-mingw显示了如何在Windows上完成它。很好回答btw! – DejanLekic
你也许可以用这样的侥幸:
void main() {
try {
dostuff();
} finally {
printf("bye\n");
};
};
如果dostuff()
抛出Error
或Throwable
的finally块仍将运行。我对标准IO,控制台信号或其他任何东西都不太熟悉,但至少要试一试。
此外,即使dostuff()
调用Runtime.terminate()
,finally块仍将运行。尽管如此,abort()
也不能这么说。
虽然不会在Linux上这样做,但ctrl + c默认绕过异常机制。 –
- 1. 如何在程序退出之前运行代码?
- 2. Angular:在退出之前运行代码
- 3. 在退出emacs之前运行函数
- 4. 如何确保在退出java应用程序之前运行一段代码
- 5. 如何在perl脚本退出之前运行一段代码
- 6. 如何在退出Vorpal.js应用程序时运行代码?
- 7. 如何停止运行某些代码?
- 8. 为某些退出代码调用shutDownHook?
- 9. 程序在运行逻辑之前退出
- 10. 我的xhr.onreadystatechange函数在运行if代码之前运行else代码
- 11. 如何才能在Android应用程序退出之前进行一些清理?
- 12. 如何在应用程序开始运行代码之前让迁移运行?
- 13. 在任何junit测试运行之前执行一些代码
- 14. 如何强制继承自己implamentation之前运行某些代码
- 15. 某些代码段随机退出当前方法
- 16. 我的程序在进入main()函数之前退出
- 17. python在运行另一个代码之前运行一些代码
- 18. Python Appengine在执行某些代码之前跟在app.yaml
- 19. C函数在输入之前退出
- 20. 如何在当前活动通过后退键退出背景之前执行某些操作?
- 21. 如何在安装文件之前运行某些内容?
- 22. CakePHP:在某些模型方法之前执行代码
- 23. 如何在循环中执行ajax请求,并在某些代码之前
- 24. 某些行代码不运行
- 25. 程序退出代码-SomeNumber
- 26. 代码在swift中完成运行之前函数返回
- 27. 有没有办法在VBScript中退出函数之前总是执行一些代码
- 28. 预期脚本:程序正在实际代码之前运行
- 29. C#WP8如何在用户退出应用程序后运行代码
- 30. 如何在Bash脚本退出之前运行命令?
您是在Windows还是Linux? (或其他) –