Servizi multithreading
Gestione controllo del servizio controlla un servizio inviando eventi di controllo del servizio alla routine del gestore di controllo del servizio. Il servizio deve rispondere agli eventi di controllo in modo tempestivo, in modo che Gestione controllo servizi possa tenere traccia dello stato del servizio. Inoltre, lo stato del servizio deve corrispondere alla descrizione dello stato ricevuto da Gestione controllo servizi.
A causa di questo meccanismo di comunicazione tra un servizio e SCM, è necessario prestare attenzione quando si usano più thread in un servizio. Quando viene richiesto di arrestare un servizio da parte di Gestione controllo servizi, deve attendere l'uscita di tutti i thread prima di segnalare a SCM che il servizio è stato arrestato. In caso contrario, SCM può diventare confuso sullo stato del servizio e potrebbe non riuscire a arrestarsi correttamente.
Gestione controllo servizi deve ricevere una notifica che indica che il servizio risponde all'evento di arresto del controllo e che lo stato di avanzamento è in corso nell'arresto del servizio. SCM presuppone che il servizio stia effettuando progressi se il servizio risponde (tramite SetServiceStatus) entro il tempo (hint di attesa) specificato nella chiamata precedente a SetServiceStatuse il punto di controllo viene aggiornato in modo da essere maggiore del checkpoint specificato nella chiamata precedente a SetServiceStatus.
Se il servizio segnala a SCM che il servizio è stato arrestato prima che tutti i thread siano usciti, è possibile che SCM lo interpreti come una contraddizione. Questo potrebbe comportare uno stato in cui il servizio non può essere arrestato o riavviato.