Delen via


Multithreaded Services

De Service Control Manager (SCM) beheert een service door gebeurtenissen van servicebeheer naar de routine van de besturingshandler van de service te verzenden. De service moet tijdig reageren op controle-gebeurtenissen, zodat de SCM de status van de service kan bijhouden. Bovendien moet de status van de service overeenkomen met de beschrijving van de status die de SCM ontvangt.

Vanwege dit communicatiemechanisme tussen een service en de SCM moet u voorzichtig zijn bij het gebruik van meerdere threads in een service. Wanneer een service wordt geïnstrueerd om door de SCM te stoppen, moet deze wachten totdat alle threads zijn afgesloten voordat ze aan de SCM rapporteren dat de service is gestopt. Anders kan de SCM verwarrend raken over de status van de service en kan de SCM mogelijk niet correct worden afgesloten.

De SCM moet worden gewaarschuwd dat de service reageert op de stopcontrolegebeurtenis en dat de voortgang wordt gemaakt bij het stoppen van de service. De SCM gaat ervan uit dat de service wordt uitgevoerd als de service reageert (via SetServiceStatus) binnen de tijd (wachthint) die is opgegeven in de vorige aanroep naar SetServiceStatusen het controlepunt wordt bijgewerkt zodat het controlepunt groter is dan het controlepunt dat is opgegeven in de vorige aanroep naar SetServiceStatus.

Als de service rapporteert aan de SCM dat de service is gestopt voordat alle threads zijn afgesloten, is het mogelijk dat de SCM dit als een tegenstrijdigheid interpreteert. Dit kan ertoe leiden dat de service niet kan worden gestopt of opnieuw kan worden gestart.