Servizi multithreaded

Gestione controllo del servizio controlla un servizio inviando eventi di controllo del servizio alla routine del gestore del controllo del servizio. Il servizio deve rispondere agli eventi di controllo in modo tempestivo in modo che SCM possa tenere traccia dello stato del servizio. Inoltre, lo stato del servizio deve corrispondere alla descrizione dello stato ricevuto da SCM.

A causa di questo meccanismo di comunicazione tra un servizio e SCM, è necessario prestare attenzione quando si usano più thread in un servizio. Quando un servizio viene incaricato di arrestare da SCM, deve attendere l'uscita di tutti i thread prima di segnalare a SCM che il servizio viene arrestato. In caso contrario, SCM può diventare confuso sullo stato del servizio e potrebbe non riuscire a arrestare correttamente.

SCM deve ricevere una notifica che il servizio risponde all'evento di controllo di arresto e che lo stato di avanzamento viene effettuato nell'arresto del servizio. SCM presuppone che il servizio stia effettuando lo stato di avanzamento se il servizio risponde (tramite SetServiceStatus) entro il tempo (hint di attesa) specificato nella chiamata precedente a SetServiceStatus e il punto di controllo viene aggiornato per 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 interpreti questa come contraddizione. Ciò potrebbe comportare uno stato in cui il servizio non può essere arrestato o riavviato.