Servicios multiproceso

El administrador de control de servicios (SCM) controla un servicio mediante el envío de eventos de control de servicio a la rutina del controlador de control del servicio. El servicio debe responder a los eventos de control de forma oportuna para que el SCM pueda realizar un seguimiento del estado del servicio. Además, el estado del servicio debe coincidir con la descripción de su estado que recibe el SCM.

Debido a este mecanismo de comunicación entre un servicio y el SCM, debe tener cuidado al usar varios subprocesos en un servicio. Cuando se indica a un servicio que detenga el SCM, debe esperar a que todos los subprocesos salgan antes de informar al SCM de que se detiene el servicio. De lo contrario, el SCM puede confundirse con el estado del servicio y podría no cerrarse correctamente.

El SCM debe recibir una notificación de que el servicio responde al evento stop control y que se está realizando el progreso al detener el servicio. El SCM asume que el servicio está progresando si el servicio responde (a través de SetServiceStatus) dentro del tiempo (sugerencia de espera) especificado en la llamada anterior a SetServiceStatus y el punto de comprobación se actualiza para que sea mayor que el punto de comprobación especificado en la llamada anterior a SetServiceStatus.

Si el servicio informa al SCM de que el servicio se ha detenido antes de que se hayan cerrado todos los subprocesos, es posible que el SCM lo interprete como una contradicción. Esto puede dar lugar a un estado en el que el servicio no se puede detener ni reiniciar.