Multithreaded Services

Správce řízení služeb (SCM) řídí službu odesláním událostí řízení služby do rutiny obslužné rutiny řízení služby. Služba musí včas reagovat na řídicí události, aby SCM mohl sledovat stav služby. Stav služby se také musí shodovat s popisem jeho stavu, který SCM obdrží.

Vzhledem k tomuto komunikačnímu mechanismu mezi službou a SCM musíte být opatrní při použití více vláken ve službě. Když je služba instruována k zastavení SCM, musí počkat, až se ukončí všechna vlákna, než se nahlásí SCM, že je služba zastavena. V opačném případě může SCM zaměnit stav služby a může selhat správně vypnout.

SCM musí být upozorněn na to, že služba reaguje na událost řízení zastavení a že probíhá postup zastavení služby. SCM předpokládá, že služba postupuje, pokud služba reaguje (prostřednictvím SetServiceStatus) v čase (tip čekání) zadaném v předchozím volání SetServiceStatusa kontrolní bod se aktualizuje tak, aby byl větší než kontrolní bod zadaný v předchozím volání SetServiceStatus.

Pokud služba hlásí SCM, že služba se zastavila před ukončením všech vláken, je možné, že SCM to interpretuje jako rozpor. To může mít za následek stav, kdy se služba nedá zastavit nebo restartovat.