![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с сервисом
chum © (2006-03-14 20:16:00)Есть такой вопросик: Написана служба, а как отследить выход в спящий (ждущий) режим или продолжение работы операционки после них. Последнее даже лучше.
Fay (2006-03-20 14:46:00) [1]2 chum (20.03.06 10:19) [6]
> Обычная функция (Handler) этого соощения не получает
Да, действительно. А я и не заметил.
chum (2006-03-20 10:19:00) [2]2Fay
RegisterServiceCtrlHandlerEx - потому-что только с её использованием регестрируется функция обработки сообщений (в MSDN зовётся HandlerEx), которая может получать сообщения SERVICE_CONTROL_POWEREVENT. Обычная функция (Handler) этого соощения не получает.
2Eraser
сервис полностью самописный, т.е. на чистом WinAPI. TService не использую.
Eraser (2006-03-17 15:27:00) [3]
> chum (16.03.06 12:54) [3]
сервис полностью самописный, т.е. на чистом WinAPI или наследника TService используешь?
Fay (2006-03-17 14:48:00) [4]2 chum (16.03.06 12:54) [3]
> При этом сервис надо регестрировать функцией RegisterServiceCtrlHandlerEx.
Это ещё почему?
chum (2006-03-16 12:54:00) [5]Lucefer
Не страшно.
2ALL
Сам разобрался. Если кому интересно, то вот.
В структуре состояния сервиса (SERVICE_STATUS) в поле dwControlsAccepted указываем, что наш сервис получает сообщения о состоянии питания (power status). Для этого указываем флаг SERVICE_ACCEPT_POWEREVENT.
При этом сервис надо регестрировать функцией RegisterServiceCtrlHandlerEx.
Ну а далее нужно обрабатывать событие SERVICE_CONTROL_POWEREVENT. Подробнее можно узнать в MSDN.
Lucefer (2006-03-15 23:17:00) [6]извини. не туда попал... :)
Lucefer (2006-03-15 23:16:00) [7]Создаю сервис, в котором объект TServerSocket порождает потоки для подключаемых клиентов. По окончании обработки эти потоки должны передать некую команду породившему их потоку. Когда то это было нечто вида
PostMessage(Application.MainForm.Handle,
RM_USER_LOGOUT,
Integer(DuplicateStrToPChar(strClientMessage)),
Integer(DuplicateStrToPChar(strClientID)));
-------------------------
Как это правильно сделать теперь? Желательно сделать это именно с помощью механизма сообщений, а не вызовом функции через Synchronize (сильно затормозит работу).