Могу ли я действительно не очистить, когда Visual Studio перестает отлаживать? - PullRequest
2 голосов
/ 06 мая 2011

У меня есть консольное приложение, которое запускает некоторое темпераментное оборудование.Если я не отсоединяюсь от этого, окна через пять минут становятся голубыми.Я могу поймать, когда приложение закрыто с помощью SetConsoleCtrlHandler.Но когда я нажимаю «остановить отладку» в visual studio, он пропускает этот процесс и просто жестоко убивает программу.По состоянию на 2009 год, кажется, никто не имеет решения для этой проблемы .

Это все еще так?Нужно ли мне жить с синим экраном, если я случайно нажму не на ту кнопку?

Ответы [ 2 ]

3 голосов
/ 06 мая 2011

Завершение процесса - это то, для чего предназначена эта кнопка . Если вы хотите, чтобы программа корректно завершилась, вам нужно дать ей возможность завершиться. Вы можете использовать кнопку «продолжить» отладчика или просто отсоединиться от процесса, а затем выйти из программы обычным способом. Или вы можете использовать отладчик, чтобы сделать что-то, что заставляет программу закрыться, например, установить флаг «выполнено», который управляет основным циклом.

Вы можете рассмотреть возможность разделения вашей программы на две части: сервис, который имеет дело с аппаратными особенностями и представляет «чистый» интерфейс для консольного приложения, и консольное приложение, которое взаимодействует со службой, а не напрямую с аппаратным обеспечением.

0 голосов
/ 06 мая 2011

Ваша непосредственная проблема - это функция TerminateProcess, которую может выполнить даже диспетчер задач, который не дает вам возможности чисто завершить работу. Даже если бы вы могли решить проблему с Visual Studio, кто-то может щелкнуть правой кнопкой мыши и «Завершить процесс», и вы окажетесь в одной лодке.

Ваша корневая проблема - плохо написанные драйверы устройств. Эти драйверы не должны быть синего экрана, даже если вы резко прерваны. Если у вас есть выбор, кроме как использовать их, вы можете попытаться обеспечить пуленепробиваемость вашего процесса, запустив его с правами администратора, запустив как службу или ограничив операции короткими промежутками времени. Или вы можете просто научить своих операторов не делать то, что может привести к взрыву вашей тонкой системы. И надеюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...