Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прощу помощи разобраться со службой. [D7, XP, 2003]


Страницы:   1 2 3

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?


В случае таймеров можно ничего не указывать. В случае потоков - разместить код для их корректного завершения.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо