|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.04.2012, 22:07 | #1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
[Delphi] Правильно организовать работу сервиса
Доброго времени суток!
Ситация следующая: Написал сервис на основе TService. Сервис вырубается отработав действие. WaitHint выставил на 5000 мс. Стоит таймер, написанный на основе мультимедийных таймеров системы, котрый в период WaitHint/2 отправляет свой статус SCM. По событию Start я инициализирую базовый класс, который не сразу, но пускает рабочие потоки(там тоже стоят мм-таймеры). По событию Stop,Shutdown вся эта шабулда прикрывается. Проблема: Сервис вырубается. Как удержать его в рабочем состоянии? Вот осн. модуль: Код:
Думаю пустить поток, который будет в холостую работать, но как чтоб не грузить систему? Кроме бесконечных цикло, ничего больше в голову не лезет. |
02.04.2012, 09:50 | #2 |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
Нужно заполнить процедуру ServiceExecute.
типа void __fastcall TLockerService::ServiceExecute(TSer vice *Sender) { while(!Terminated ) { Sleep(100); ServiceThread->ProcessRequests(false); } } или delphi procedure TService1.ServiceExecute(Sender: TService); begin while not Terminated do ServiceThread.ProcessRequests(False ); end;
Знающий не говорит, говорящий не знает (С) Лао Цзы
|
02.04.2012, 20:40 | #3 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Нет не помогло.сервис отработывает 1 раз и отваливается. Ни ошибок.. ничего..
Как быть.. |
02.04.2012, 21:09 | #4 | |
Форумчанин
Регистрация: 30.10.2009
Сообщений: 114
|
Цитата:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx Что насчет Delphi и его TService, то вот первая же ссылка из гугла: http://www.tolderlund.eu/delphi/service/service.htm >Нет не помогло Проверяйте еще. В классе сервиса должен быть метод, который вызывается по событию OnExecute, в нем и должен находиться основной код сервиса. |
|
03.04.2012, 01:10 | #5 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Раньше, я в таймере запускал поток, который делал все дела, но сайчас так уже нельзя сделать т.к. программа стала сложнее и в 1 поток все не утворишь.
Цитата:
Последний раз редактировалось Человек_Борща; 03.04.2012 в 01:18. |
|
03.04.2012, 10:17 | #6 | |
Форумчанин
Регистрация: 30.10.2009
Сообщений: 114
|
Цитата:
Выше по ссылке и в этом топике есть минимальные примеры кода, которые должны быть в OnExecute, чтобы сервис постоянно "работал". Код:
|
|
03.04.2012, 11:08 | #7 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Цитата:
Однако нет такого кода,который можно туда внести. у меня 2 осн. метода: _InitService, который выделает ресурсы и создает экземпляр рабочего класса и _FinalService, который останавливает рабочий экземпляр класса и освобождает ресурсы. Сама работа сервиса делается внутри класса, и её никак не вынести в OnExecute. ещё раз почитаю ссылки, мб что-то на ум придет. А пока есть мысль создавать поток и в нем все делать, но не глупо ли это? Ведь есть же у сервиса свой осн. поток, куда и толкается OnExecute, но нужно его заставить просто работать в холостую. Последний раз редактировалось Человек_Борща; 03.04.2012 в 11:11. |
|
03.04.2012, 15:01 | #8 |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
Код:
Там может быть ошибка по доступу и сервис просто не запускается.(прекращает работу, т.к. ему нечего делать =))) До OnExecute просто не доходит дело. В отладчике у нас что видно?
Знающий не говорит, говорящий не знает (С) Лао Цзы
Последний раз редактировалось Krok27; 03.04.2012 в 15:04. |
03.04.2012, 19:10 | #9 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Он запускается, отработывает и выключается.
При перезапуске системы, сервис сам запускается, отработывает функции и выключается. Никаких ошибок не происходит(мониторил EurekaLog). А мне нужно чтобы он работал постоянно. Код:
Последний раз редактировалось Человек_Борща; 03.04.2012 в 19:20. |
04.04.2012, 11:30 | #10 |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
Рабочий код сервиса, который выводит раз в 5 сек MessageBox по таймеру на стол пользователя.
Код:
Знающий не говорит, говорящий не знает (С) Лао Цзы
Последний раз редактировалось Krok27; 04.04.2012 в 11:37. |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как правильно организовать сохранение в файл delphi | JK0 | Помощь студентам | 1 | 21.12.2010 21:14 |
Как правильно организовать непростой шаблон двоичного дерева? | nowaalex | Общие вопросы C/C++ | 10 | 02.12.2010 02:47 |
как правильно организовать продажу своего софта? | broderweb | Свободное общение | 11 | 02.12.2009 17:41 |
Как организовать прием и работу кладра | tarakan1983 | БД в Delphi | 10 | 12.03.2009 18:30 |
ADO + SQL Server. Как правильно организовать одновременную работу с таблицей | Mouse123 | БД в Delphi | 17 | 04.07.2008 17:35 |