Аналог Win32 API для отправки / перехвата SIGTERM
Вопрос
В POSIX OS есть signal API, который позволяет отправлять сигнал процессу для его завершения с помощью kill и вы можете перехватить его с помощью sigaction и делать то, что вам нужно;
Однако Win32 не является системой POSIX, поэтому:
- Как я могу обрабатывать события завершения работы, которые могут поступать, например, из "Завершить процесс" в "Диспетчере задач"?
- Каков стандартный API для отправки сигнала завершения работы в приложение Win32?
Я не говорю о графическом интерфейсе, я говорю о сервере TCP / IP, который должен быть легко отключен.это не делает запускайте как службу Windows.
Решение
Вы получаете WM_QUIT
сообщение в вашей первой созданной теме.
Когда вы не справляетесь с этим, ваш процесс принудительно завершается.
Поэтому просто реализуйте очередь сообщений в вашем первом потоке, который ищет WM_QUIT
Сообщение
Другие советы
MSDNs Руководство по миграции кода Unix имеет главу о Преобразование кода Win32 и обработка сигналов.
Хотя Microsoft решила заархивировать это замечательное руководство, оно очень полезно.
Описаны три метода:
Собственные сигналы
Объекты событий
Сообщения
Может быть управление питанием Windows из MSDN было бы полезно.Но он имеет дело с системными событиями, а не с каждым процессом.
Для процесса вы могли бы обнаружить завершение с помощью WM_CLOSE
.Вам нужно будет обрабатывать сообщения Windows.Если это консольное приложение, вам нужно будет установить обработчик элемента управления;взгляните на SetConsoleCtrlHandler - Обработчик SetConsoleCtrlHandler в MSDN