Привет Зак - недостаточно места в комментариях - см. Мой ответ об отключении обработки сигнала CTRL-C на stdin. Если вам нужен пример простого обработчика клавиатуры, который перехватывает CTRL-C в качестве ввода вместо сигнала, дайте мне знать, и я опубликую пример.

я есть приложение Windows в консольном режиме (перенесено из Unix), которое изначально было разработано для чистого выхода при получении^ C (UnixSIGINT). Чистый выход в этом случае предполагает ожидание, потенциально довольно продолжительное время, закрытия удаленных сетевых подключений. (Я знаю, что это не нормальное поведение^ C но я не могу его изменить.) Программа однопоточная.

Я могу поймать^ C либо сsignal(SIGINT) (как под Unix) или сSetConsoleCtrlHandler, Либо работает правильно, когда программа запускается под CMD.EXE. Однако, если я использую оболочку «bash», входящую в комплект MSYS (я использую среду MinGW для сборки программы, так как это позволяет мне повторно использовать make-файлы Unix), то программа принудительно завершается через некоторое случайное короткое время (меньше чем 100 миллисекунд) после^ C, Это недопустимо, так как, как я уже говорил, программе необходимо дождаться закрытия удаленных сетевых подключений.

Очень вероятно, что люди захотят запустить эту программу под MSYS bash. Также этот эффект нарушает набор тестов. Я не смог найти способ обойти проблему ни внутри программы (идеально), ни с помощью настроек оболочки (приемлемо). Кто-нибудь может порекомендовать что-нибудь?

Ответы на вопрос(6)

Ваш ответ на вопрос