2009-08-01 36 views
11

En el sistema operativo POSIX hay señal de API que permite enviar una señal al proceso para cerrarla con kill y puede atraparla con sigaction y hacer lo que necesite;Win32 API analógica de envío/captura SIGTERM

Sin embargo, no es Win32 sistema POSIX, por lo que:

  • Cómo puedo manipular los eventos de cierre que pueden venir, por ejemplo, de "Terminar proceso" en el "Administrador de tareas"?
  • ¿Cuál es la API estándar para enviar la señal de apagado a la aplicación Win32?

No estoy hablando de GUI, estoy hablando de servidor TCP/IP que debe estar muy bien apagado. que no ejecuta como el servicio de Windows.

Respuesta

2

Usted obtiene un mensaje WM_QUIT en su primer hilo creado.

Cuando no maneja eso, su proceso se cierra por la fuerza.

Así que implementar una cola de mensajes en su primera rosca, que busca el mensaje WM_QUIT

+1

Debe manejar WM_CLOSE. "El mensaje WM_QUIT no está asociado con una ventana y, por lo tanto, nunca se recibirá a través del procedimiento de ventana de una ventana. Solo se recupera mediante las funciones GetMessage o PeekMessage". -MSDN – Indy9000

+0

¿Puedo usar el mismo método para la consola Ctrl + C y para el proceso runnig como servicio de Windows? O debería usar diferentes métodos para cada uno de ellos? – Artyom

3

Puede ser Windows Power Management de MSDN sería útil. Pero se trata de eventos del sistema en lugar de por proceso.

Para un proceso, usted podría detectar la terminación con WM_CLOSE. Debería manejar los mensajes de Windows. Si se trata de una aplicación de consola, necesitaría instalar un controlador de control; echar un vistazo a SetConsoleCtrlHandler en MSDN

4

MSDNs Unix Código Guía de migración tiene un capítulo sobre Win32 code conversion and signal handling.
Aunque Microsoft ha decidido archivar esta brillante guía, es muy útil. se describen

tres métodos:
objetos señales nativas
Evento
Mensajes