다중 스레드 서비스

SCM(서비스 제어 관리자)은 서비스의 제어 처리기 루틴에 서비스 제어 이벤트를 전송하여 서비스를 제어합니다. SCM이 서비스 상태를 추적할 수 있도록 서비스는 적시에 제어 이벤트에 응답해야 합니다. 또한 서비스의 상태는 SCM이 수신하는 상태에 대한 설명과 일치해야 합니다.

서비스와 SCM 간의 통신 메커니즘으로 인해 서비스에서 여러 스레드를 사용할 때는 주의해야 합니다. 서비스가 SCM에 의해 중지되도록 지시되는 경우 서비스가 중지되었음을 SCM에 보고하기 전에 모든 스레드가 종료될 때까지 기다려야 합니다. 그렇지 않으면 SCM이 서비스 상태에 대해 혼동될 수 있으며 올바르게 종료되지 않을 수 있습니다.

SCM은 서비스가 중지 제어 이벤트에 응답하고 있으며 서비스를 중지할 때 진행 중이라는 알림을 받아야 합니다. SCM은 서비스가 SetServiceStatus에 대한 이전 호출에 지정된 시간(대기 힌트) 내에 응답하고 검사 지점이 SetServiceStatus에 대한 이전 호출에서 지정한 검사점보다 크도록 업데이트되는 경우 서비스가 진행 중이라고 가정합니다.

서비스가 모든 스레드가 종료되기 전에 서비스가 중지되었음을 SCM에 보고하는 경우 SCM이 이를 모순으로 해석할 수 있습니다. 이로 인해 서비스를 중지하거나 다시 시작할 수 없는 상태가 될 수 있습니다.