У меня есть приложение командной строки в Windows 7. Оно состоит в основном из бесконечного цикла. Когда я нажимаю кнопку закрытия окна командной строки, она, похоже, мгновенно убивается. Тем не менее, я закрываю соединение базы данных SQLite в деструкторе, поэтому я боюсь, что база данных может быть повреждена. Даже если это не так, я хотел бы иметь возможность правильно закончить свой объект (возможно, путем написания чего-то файла, регистрации и т. Д.).Почему деструктор не вызван, когда я нажимаю кнопку закрытия на консоли?
Могу ли я как-то убедиться, что мой деструктор называется? Что именно происходит, если я закрою окно? Есть ли более «мягкий» способ закрыть программу?
... на самом деле я не уверен, что вы можете установить флаг, не нужно ли выполнять очистку перед выходом из консоли ConsoleHandlerRoutine? –
@HarryJohnston: Да. Если 'Handler' возвращает TRUE, процесс немедленно прекращается. Если он возвращает FALSE, вызывается следующий зарегистрированный «обработчик» и т. Д., Пока не будет достигнуто значение «TRUE» или «Handler» по умолчанию, в любом случае процесс завершается. И вы должны принять во внимание, что 'Handler' вызывается в контексте его собственного потока, поэтому убедитесь, что его код является потокобезопасным. –
Я предполагаю, что во многих случаях для прогона обработчика проще всего установить флаг, а затем просто спать до тех пор, пока основной поток не завершит процесс. –