- Возможно ли каким-либо образом обработать это событие?
- Что происходит с точки зрения разворачивания стека и освобождения статических/глобальных объектов?
ответ
EDIT: SIGINT, а не SIGTERM. И Assaf сообщает, что ни один объект не уничтожается (по крайней мере, в Windows) для неподготовленного SIGINT.
Система отправляет SIGINT. Эта концепция применяется (с некоторой дисперсией) для всех реализаций C. Для его обработки вы вызываете сигнал, указав обработчик сигнала. См. Документацию по функции сигнала на Open Group и MSDN.
Второй вопрос немного сложнее и может зависеть от реализации. Лучше всего обрабатывать сигнал, который позволяет использовать delete
и exit()
вручную.
Спасибо. fyi, связанная с вами страница MSDN предполагает, что система отправляет SIGINT (и что NT вверх не отправляет SIGTERM вообще). –
Спасибо, Ассаф. Исправленный. –
Кроме того, SIGINT, который преобразуется в ExitProcess, не вызывает разрушения любого объекта (глобального, локального статического, автоматического). Если, otoh, вы переводите sigint в exit(), globals/statics будет деструктором в обратном порядке инициализации (но автоматики нет). –
Ctrl-C в приложении консоли будет генерировать сигнал. Обработчик по умолчанию этого сигнала вызывает ExitProcess для завершения работы приложения. Вы можете переопределить это поведение, установив собственные функции обработчика для сигнала с помощью функции SetConsoleCtrlHandler.
+1 для ответа на вопрос! –
Как насчет освобождения статики? –
Вы можете проверить, происходит ли стек разматывания, с простой код:
#include <iostream>
#include <windows.h>
using namespace std;
struct A {
~A() { cerr << "unwound" << endl; }
};
int main() {
A a;
while(1) {
Sleep(1000);
}
}
ли происходит это не должно быть, зависит от реализации, в зависимости от того, как среда выполнения обрабатывает Ctrl-C. По моему опыту, этого не происходит.
Хороший тест! Я стою исправлено. –
Мне сложно доверять такой тест, потому что я никогда не буду уверен, будет ли поведение отличаться для разных конфигураций проектов (например, libs, dll, native, managed, multi-threaded и их комбинации). Поэтому я предпочел бы «истинный» ответ и не полагаться на такой тест сам. –
Не существует «истинного» ответа - на C++ Standard нечего сказать по этому вопросу, поэтому то, что вы получите, всегда будет зависимым от реализации. – 2009-05-27 11:32:12
- 1. Обработка сообщений в консольных приложениях/DLL в C++ Win32
- 2. Что такое проект win32 в visual C++?
- 3. Что такое пейджинговый эффект в C++?
- 4. Неограничивающий глобальный обработчик исключений в консольных приложениях
- 5. Процессы зомби в консольных приложениях VS 2013
- 6. Создание деревьев вариантов в консольных приложениях
- 7. Как бороться с^C в консольных приложениях JVM?
- 8. Что такое эффект Postgres HStore на производительность?
- 9. Что такое эффект SYSO (System.out.println())?
- 10. Как сопоставить скобки в консольных приложениях для C++
- 11. Как использовать автозаполнение в консольных приложениях Python?
- 12. Как создать пустое квадратное (пользовательские параметры) в консольных приложениях C#?
- 13. Обработка пользовательских исключений в консольных приложениях VB.net
- 14. Как использовать компоненты vcl в консольных приложениях?
- 15. Что такое эквивалент win32 для mac?
- 16. Настройка ELMAH на консольных приложениях для файлов XML
- 17. Правильный способ написания консольных приложений на GNU/Linux с C++
- 18. .net - Эффект стекла в приложениях C# 2.0
- 19. Что такое C#/Win32 Control Диалоговое окно беспроводной сети?
- 20. Что такое альтернативная функция C++ для _tprintf в win32 api?
- 21. Что такое заголовок CLR в приложениях .net?
- 22. Что такое домены приложений в приложениях Facebook?
- 23. Что такое сообщение WIN32 API WM_REFLECT?
- 24. Что такое домен приложения в приложениях Facebook?
- 25. Что такое UserPreferenceChangedEventHandler в приложениях winform для C#?
- 26. Что такое экземпляр функции GetExplicitEntriesFromAcl() Win32 API?
- 27. Что такое эффект StructLayoutAttribute для свойств в C#?
- 28. Что такое «отправлено» в приложениях ASP.NET MVC?
- 29. Что такое использование XML в веб-приложениях?
- 30. Что такое CodeResources в приложениях Mac Cocoa?
+1: Отличный вопрос :) –
Отличная ручка :) –