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