多线程服务
SCM(服务控制管理器)向服务的控制处理器发送服务控制事件来控制一个服务。服务必须在短时间内响应控制请求,使得SCM可以明确服务的当前状态。还有,服务的当前状态必须和它向SCM报告的状态相一致。
由于服务和SCM之间的这种通信机制,使用多线程服务必须小心。当从SCM那里收到停止指示,在向SCM报告服务已经停止之前,必须等待服务中的所有线程全部退出。否则,SCM可能不能正确关闭服务。
服务响应停止控制事件并开始停止服务的工作,这时需要通知SCM。如果服务在之前调用的SetServiceStatus中设置的等待时间内做出响应,并且检查点比之前调用的SetServiceStatus中设置的检查点大,SCM就假定服务已经开始停止处理。
如果在所有的线程退出之前,服务向SCM报告已经停止,SCM可能会认为这是矛盾的。这可能导致服务进入一个不能停止也不能重新启动的状态。