![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прощу помощи разобраться со службой. [D7, XP, 2003]
Lamer6666 © (2012-06-17 09:23:00)Доброго времени суток уважаемы.
Начал осваивать службы на основе VCL (WinAPI пока сложновато.)
Прочитал статью на королевстве о создании служб (события, методы) но в целом представление не сложилось.
1. Создал ServiceAplication
2. Скомпилировал
3. service1.exe /install служба появилась в остановленном виде.
Далее как я понимаю необходимо использовать OnStart. Согласно статье тут нужно запускать потоки.
Можно нечто блок схемы функционирования сервиса и поток в нем привести?
Например я понимаю так, исходя из моей задачи:
С разделе OnStart запускаю таймер (пока не представляю как), и по таймеру выполняю например чтение строки из файла 1.txt и запись ее в 2.txt. Так мой сервис работает целый день. Что указать по событию onStop?
Прошу прощение за мое не понимание, и возможно не правильную формулировку, прошу помощи!
Медвежонок Пятачок (2012-06-17 11:31:00) [41]и зачем здесь таймер?
потому что надо "раз в минуту", а на нем часики нарисованы?
Lamer6666 (2012-06-17 11:25:00) [42]Ну в целом задача такова:
Каждые пол минуты необходимо опрашивать БД или файл с данными. Если есть новые данные, то отправлять GET запрос на добавление этих данных стороннему WEB серверу. Посему решил реализовать сие в сервисе, что бы сервис стартовал вместе с ОС и каждую минут выполнят выше указанные действия.
На счет потоков спрашивал потому что GET запросы планировал осуществлять в потоке так как GET запросы может выполняться значительно время (не знаю верно ли это но я учитываю что сервис должен уведомлять систему о своем состоянии, ведь GET может длиться долго)
Примерно так.
Медвежонок Пятачок (2012-06-17 11:15:00) [43]сначала объясни зачем тебе таймер. можно даже не мне, а себе.
Lamer6666 (2012-06-17 11:12:00) [44]
> началось.....
> там где должен быть полезный код вставляем всякую хренотень.
>
> а полезный код за каким-то лешим в обработчик таймера суем.
>
> как учили в автошколе.
Ну так объясните пожалуйсто что полезно что нет.
Lamer6666 (2012-06-17 11:11:00) [45]
> ты вообще чему нибудь учишься? тебе же уже объясняли про
> ProcessMessages, почему его и в обычном то приложении в
> большинстве случаев нельзя использовать . что уже говорить
> про потоки/сервисы.
Просто я из тех соображений, что сервис должен подавать признаки жизни (ProcessRequests(WaitForMessage: Boolean) — обычно используется в OnExecute для получения и обработки сообщений от SCM. Некий аналог Application.ProcessMessages......) как сказано тут http://delphikingdom.ru/asp/viewitem.asp?catalogid=1348
sniknik (2012-06-17 10:58:00) [46]> Согласно статье тут нужно запускать потоки.
вранье, или ты врешь что там так написано. нет, там можнозапускать потоки, если по логике программы требуется, но не нужно.
> Ненужно ли сюда добавить нечто вроде Application.ProcessMessages после Sleep?
ты вообще чему нибудь учишься? тебе же уже объясняли про ProcessMessages, почему его и в обычном то приложении в большинстве случаев нельзя использовать . что уже говорить про потоки/сервисы.
Медвежонок Пятачок (2012-06-17 10:50:00) [47]началось.....
там где должен быть полезный код вставляем всякую хренотень.
а полезный код за каким-то лешим в обработчик таймера суем.
как учили в автошколе.
Lamer6666 (2012-06-17 10:44:00) [48]
> while not Terminated do begin
> ReadLn(F1, S);
> WriteLn(F2, S);
> Sleep(X); //а так?
> end;
Ненужно ли сюда добавить нечто вроде Application.ProcessMessages после Sleep?
Давайте будем жрать! (2012-06-17 10:39:00) [49]while not Terminated do begin
ReadLn(F1, S);
WriteLn(F2, S);
Sleep(X); //а так?
end;
Lamer6666 (2012-06-17 10:10:00) [50]
> Пока что тебе достаточно написать свой код в обработчике
> OnExecute. Что-то вроде
> while not Terminated do begin
> ReadLn(F1, S);
> WriteLn(F2, S);
> end;
Ну ведь здесь мы не можем указать периодичность исполнения кода. (
Lamer6666 (2012-06-17 10:00:00) [51]
> В случае таймеров можно ничего не указывать. В случае потоков
> - разместить код для их корректного завершения.
А вообще как я понимаю сервис запускается при старте системы выполнив код OnStart, затем что происходит? Сервис завершает работу выполнив OnStop и все после служба остановлена?
Давайте будем жрать! (2012-06-17 09:42:00) [52]Пока что тебе достаточно написать свой код в обработчике OnExecute. Что-то вроде
while not Terminated do begin
ReadLn(F1, S);
WriteLn(F2, S);
end;
Loginov Dmitry (2012-06-17 09:38:00) [53]
> С разделе OnStart запускаю таймер (пока не представляю как)
См. св-во TTimer.Enabled
> Что указать по событию onStop?
В случае таймеров можно ничего не указывать. В случае потоков - разместить код для их корректного завершения.