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

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

сервис


Страницы:   1 2

snake_r ©   (2005-02-10 12:27:00) 

Здравствуйте! я сделал сервис
повесил обработчик на событи onStart
все как бы нормально
но, где та процедура которая должна выполняться собственно?
где ее описать??


Digitman   (2005-02-11 12:17:00) [1]


> а вот по поводу этого, поподробнее :)
> как послать сообщение сервису?


ты сейчас чем озабочен ? отслеживанием изменений в каталоге ? ну так и реализуй сначала ЭТУ задачу как положено, а потом за другие берись)

а что касается сообщений, то посылаются они обычным образом - Sendmessage (конкретному окну, если сервис его создал и взаимодействует с раб.столом) и PostThreadMessage (непосредственно треду сервиса)


snake_r   (2005-02-11 12:04:00) [2]

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

а вот по поводу этого, поподробнее :)
как послать сообщение сервису?
примерчик есть какойнить??


Digitman   (2005-02-11 11:46:00) [3]


> в преобразовании строки к флоату была допущена ошибка
> а система явно ничего не говорила по этому поводу


правильно.
и не скажет ничего.
на то он и сервис, чтобы система своими спецсредствами регистрировала его события (штатные и нештатные) и записывала в протокол


> сервис ждет какогото сообщения , какого? незнаю


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


> стоит у меня там в цикле чтение каталога
> обычным FindFirst и FindNext


дурней не придумаешь - без конца в цикле "шакалить" по каталогу в надежде поймать факт изменения его содержимого

на то есть специальные ф-ции - ReadDirectoryChanges, FindFirstChangeNotification, FindNextChangeNotification,  FindCloseChangeNotification


> как снизить эту загруженность?


как раз используя эти ф-ции, а не бестолковый цикл из FindFirst и FindNext


snake_r   (2005-02-11 11:15:00) [4]

нее :)
все нормально стало стартовать :)
я просто посмотрел в Application Events
а там стоит , что мой сервис закрыт всвязи с invalid floating point operation :)
т.е. косяк был просто в том что в преобразовании строки к флоату была допущена ошибка
а система явно ничего не говорила по этому поводу
записывая событие в эвентах :)
вот

щас усе работает

а этот параметр
ServiceThread.ProcessRequests(False);
true - я так понял сервис ждет какогото сообщения , какого? незнаю, и соответвенно ничего не делается
false - сервис ничего не ждет а делает то че ему сказанно

тока блин непонятка опять
ну стоит у меня там в цикле чтение каталога
обычным FindFirst и FindNext

смотрю в менеджер процессов
а там мой процесс хавает аж 60%!!!!!

можете чегонибудь подсказать по этому поводу??
как снизить эту загруженность?


Digitman   (2005-02-11 10:05:00) [5]


> Fay ©   (11.02.05 09:59) [17]


вполне возможно


Fay   (2005-02-11 09:59:00) [6]

Еcть предположение, что автор стартует  сервис как простое приложение.


Digitman   (2005-02-11 09:02:00) [7]

главное условие автоматического останова сервиса - завершение обработки события OnExecute.. как только обработчик завершается, сервис автоматически останавливается, при этом событие OnStop не возбуждается

если же обработчик OnExecute не назначен, сервис будет неявно циклически вызывать ProcessRequests(True) до тех пор пока сервису не поступит команда на останов, при этом будет возбуждено событие OnStop, в обработчике которого можно подтвердить или отвергнуть запрос на останов сервиса (параметр Stopped)


Digitman   (2005-02-11 08:55:00) [8]


> snake_r   (11.02.05 08:43) [14]


> как нечего если я там
> While not terminated do


где ТАМ ? в OnExecute ?
я же сказал тебе - для проверки убери напрочь обработку OnExecute и убедись в том что сервис и стартует и останавливается по требованию SMC как и положено !


snake_r   (2005-02-11 08:43:00) [9]

Зделал как вы сказали :(
все равно служба запускается и тут же останавливается :((
с сообщением что служба была запущена и остановленна автоматически потому что ей нечего делать :(
блин как нечего если я там
While not terminated do
Begin
  //тут читается каталог и если состояние изменилось то  соответсвенно производятся определенные действия
End;

!!!!!!


Digitman   (2005-02-10 15:03:00) [10]


> цитирую хелп, от Delphi 5.0


почему бы в теме поста СРАЗУ не указать Д5 ? лень ?

у меня Д7, там в примере True, хотя это и не принципиально (при False проц.время будет бестолково потребляться в отличие от True)


> всеравно после запуска процесса он останавливаетс с тем
> же самым сообщением


ЕЩЕ раз повторяю :

- убери обработчик OnExecute
- в обработчике OnStart напиши ТОЛЬКО Started := True
- в обработчике OnStop напиши ТОЛЬКО Stopped := True
- более НИКАКИЕ события НЕ обрабатывай

убедись что сервис успешно стартует и останавливается.


snake_r   (2005-02-10 14:46:00) [11]

ну подскажите!!!
почему сервис теперь сразу останавливается говоря что ему нечего просто делать :((
жопа какаято :(
то не стартовал теперь стартует и тут же тормозится :(
попробовал в фцнкции onExecute сделать просто Inc(i)

но всеравно после запуска процесса он останавливаетс с тем же самым сообщением :(


snake_r   (2005-02-10 14:04:00) [12]

а на счет не выдумывай
вот... цитирую хелп, от Delphi 5.0

4 Finally, select Service1 by clicking in the window’s client area (but not on the ServiceSocket). In the Object Inspector, double click the OnExecute event and add the following event handler:

procedure TService1.Service1Execute(Sender: TService);

begin
 Stream := TMemoryStream.Create;
 try
   ServerSocket1.Port := 80; // WWW port
   ServerSocket1.Active := True;

   while not Terminated do begin

     ServiceThread.ProcessRequests(False);
   end;

   ServerSocket1.Active := False;

 finally
   Stream.Free;
 end;
end;


snake_r   (2005-02-10 13:58:00) [13]

сервис стартует и сраз останавливается :(
выдается сообщение что
служба была запущена и остановленна....
так как ей типа нечего делать :(


Digitman   (2005-02-10 13:38:00) [14]


> так в хелпе было , в примере!!!


чего там было, в хэлпе !? пример обработчика OnExecute ?
вот уж не выдумывай, нет там False !

цитирую :

тема "Service applications"

procedure TService1.Service1Execute(Sender: TService);
begin
 Stream := TMemoryStream.Create;
 try
   ServerSocket1.Port := 80; // WWW port
   ServerSocket1.Active := True;
   while not Terminated do begin
     ServiceThread.ProcessRequests( True);
   end;
   ServerSocket1.Active := False;
 finally
   Stream.Free;
 end;
end;


> пофиг! ставлю Started:=true;
> все равно не запускается :(
> пишет что не получен ответ от сервиса за требуемое время
> :(


убери обработку OnExecute

в обработчике OnStart напиши Started := True
в обработчике OnStop напиши Stopped := True

убедись что сервис успешно стартует и останавливается.


snake_r   (2005-02-10 13:11:00) [15]

пофиг! ставлю Started:=true;
все равно не запускается :(
пишет что не получен ответ от сервиса за требуемое время :(


snake_r   (2005-02-10 13:06:00) [16]

>>digitman
так в хелпе было , в примере!!!


Digitman   (2005-02-10 13:03:00) [17]


> повесил обработчик на событи onStart



> сервис не может стартовать


параметр Started там видел ?

а OnExecute здесь вообще ни при чем, хоть обрабатываешь ты его, хоть не обрабатываешь ..


Digitman   (2005-02-10 13:01:00) [18]


> ProcessRequests( False);


почему false-то ? от балды что ли ?


snake_r   (2005-02-10 12:42:00) [19]

значит правильно ....
написал в onExecute
try
   while not Terminated do
    begin
     ServiceThread.ProcessRequests(False);
    end;
 finally
 end;

сервис не может стартовать :((


Reindeer Moss Eater   (2005-02-10 12:41:00) [20]

OnExecute


Страницы:   1 2

Наверх

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