2011-05-06 68 views
2

我有一个控制台应用程序,运行一些气质的硬件。如果我没有很好地分离它,五分钟后窗户趋向于蓝屏。我可以通过使用SetConsoleCtrlHandler来关闭应用程序。但是,当我在visual studio中点击“停止调试”时,它会跳过这个过程,只是残酷地杀死程序。截至2009年,nobody对此problemsolution当Visual Studio停止调试时,我真的不能清理吗?

这仍然是这种情况吗?如果我不小心敲错了按钮,我真的必须住在蓝屏吗?

回答

3

杀死进程是那个按钮是如果您希望程序正常终止,您需要让程序运行完成。您可以使用调试器的“继续”按钮,或者只是从进程中分离,然后以正常方式退出程序。或者你可以使用调试器来做一些让程序退出的东西,比如设置一个控制主循环的“完成”标志。

您可能会考虑将您的程序分为两部分:处理硬件特性并向控制台应用程序提供“干净”接口的服务,以及与服务对话而不是直接与硬件通信的控制台应用程序。

0

你的直接问题是即使任务管理器可以执行的TerminateProcess函数,它使你无法清楚地关闭。即使你可以解决Visual Studio的问题,也可以通过右键点击和“结束进程”,你就可以在同一条船上。

你的根本问题是写得不好的设备驱动程序。即使您突然终止,这些驱动程序也不应该蓝屏。如果你有选择,但要使用它们,那么你可以尝试通过以管理权限运行,作为服务运行,或限制操作到短时间窗口来防御你的进程。或者你可以简单地训练你的操作员不要做那些会导致你的微妙系统爆炸的事情。希望。

+0

操作员不是问题,因为他们将被锁定在做这样的事情。他们甚至没有键盘。这只是白痴开发者的问题(即我)。 – wxffles 2011-05-06 04:11:43

+0

@wxffles:是不是意外停止了程序,或者是因为无法继续的崩溃/错误/异常而被迫停止程序?如果是偶然的,你如何阻止它?调试 - >停止调试?按住Shift + F5? – 2011-05-06 04:26:47

相关问题