Win32 API аналог отправки / отлова SIGTERM - PullRequest
11 голосов
/ 01 августа 2009

Под POSIX OS существует API сигналов, который позволяет отправить сигнал процессу, чтобы выключить его с kill, и вы можете поймать его с sigaction и делать то, что вам нужно;

Однако Win32 не является системой POSIX, поэтому:

  • Как я могу обрабатывать события завершения работы, которые могут произойти, например, из «Завершить процесс» в «Диспетчере задач»?
  • Что такое стандартный API для отправки сигнала выключения в приложение Win32?

Я не говорю о графическом интерфейсе, я говорю о TCP / IP-сервере, который должен быть красиво отключен. что не работает как служба Windows.

Ответы [ 3 ]

5 голосов
/ 01 августа 2009

MSDN Руководство по миграции кода Unix содержит главу о преобразовании кода Win32 и обработке сигналов .
Хотя Microsoft решила заархивировать это блестящее руководство, оно очень полезно.

Описаны три метода:
Родные сигналы
Объекты события
Сообщения

3 голосов
/ 01 августа 2009

Может быть Windows Power Management с MSDN . Но речь идет о системных событиях, а не о процессах.

Для процесса вы сможете обнаружить завершение с помощью WM_CLOSE. Вам нужно будет обрабатывать сообщения Windows. Если это консольное приложение, вам необходимо установить обработчик управления; взгляните на SetConsoleCtrlHandler на MSDN

2 голосов
/ 01 августа 2009

Вы получаете сообщение WM_QUIT в своей первой созданной теме.

Если вы этого не сделаете, ваш процесс принудительно остановится.

Так что просто внедрите очередь сообщений в свой первый поток, который ищет сообщение WM_QUIT

...