Многопоточность служб


Диспетчер управления службами (SCM) управляет службой, отправляя сервисные события управления процедуре обрабатывающей программы управления службой. Служба должна отвечать на события управления в своевременной манере так, чтобы Диспетчер управления службами (SCM) мог отслеживать состояние службы. Кроме того, состояние службы должно соответствовать описанию того состояния, которое получил SCM.

Из-за этого механизма связи между службой и Диспетчером управления службами (SCM), Вы должны быть осторожными, используя несколько потоков в службе. Когда служба дает команду остановить SCM, она должна, перед этим сообщением  дождаться выхода из всех потоков, чтобы служба была остановлена. Иначе, SCM может сбиться касательно состояния службы и не сможет завершить работу ошибкой, чтобы правильно ее отключить. 

Диспетчер управления службами (SCM) должен получить сообщение, что служба отреагировала на событие управления остановом, и что действия по останову службы делаются. SCM возьмет на себя управление службой, в которой совершается действие, если служба реагирует (через функцию SetServiceStatus) в пределах времени (указание ожидать), определенном в предыдущем вызове функции  SetServiceStatus, а контрольная точка обновляется, чтобы она был больше чем контрольная точка, определенная при предыдущем вызове функции SetServiceStatus.

Если служба сообщает Диспетчеру управления службами (SCM), что она остановилась прежде, чем все потоки закончили работу, возможно, что SCM поймет это как противоречие. Это может привести к состоянию, при котором служба не может быть остановлена или повторно запущена.

Дополнительную информацию смотри в статье Создание многопоточной службы.

Назад в оглавление
На главную страницу

Hosted by uCoz