2011-05-06 70 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

相關問題