Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Вниз

сервис   Найти похожие ветки 

 
snake_r   (2005-02-10 12:27) [0]

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


 
Digitman ©   (2005-02-10 12:34) [1]


> где ее описать??


в разделе описаний модуля


> где та процедура которая должна выполняться собственно?


а, собственно, какая процедура, по твоему мнению, "должна выполняться" ?


 
snake_r   (2005-02-10 12:37) [2]

тот поток который функционирует в теле сервиса собственно!


 
Reindeer Moss Eater ©   (2005-02-10 12:41) [3]

OnExecute


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

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

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


 
Digitman ©   (2005-02-10 13:01) [5]


> ProcessRequests(False);


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


 
Digitman ©   (2005-02-10 13:03) [6]


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



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


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

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


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

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


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

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


 
Digitman ©   (2005-02-10 13:38) [9]


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


чего там было, в хэлпе !? пример обработчика 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:58) [10]

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


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

а на счет не выдумывай
вот... цитирую хелп, от 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 14:46) [12]

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

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


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


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


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

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


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


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

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

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


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

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

!!!!!!


 
Digitman ©   (2005-02-11 08:55) [15]


> snake_r   (11.02.05 08:43) [14]


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


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


 
Digitman ©   (2005-02-11 09:02) [16]

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

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


 
Fay ©   (2005-02-11 09:59) [17]

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


 
Digitman ©   (2005-02-11 10:05) [18]


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


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


 
snake_r   (2005-02-11 11:15) [19]

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

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

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

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

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

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


 
Digitman ©   (2005-02-11 11:46) [20]


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


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


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


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


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


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

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


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


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


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

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

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


 
Digitman ©   (2005-02-11 12:17) [22]


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


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

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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.041 c
1-1108464687
GarageX
2005-02-15 13:51
2005.02.27
определить


6-1103521635
Lex_!
2004-12-20 08:47
2005.02.27
Web-чат.


1-1108221507
TeNY
2005-02-12 18:18
2005.02.27
Что за команда Enum и как ей можно пользоваться


14-1107504785
skiff
2005-02-04 11:13
2005.02.27
на повестке часа...


14-1107881734
AG.Smit
2005-02-08 19:55
2005.02.27
Кто скажет что значит "ИМХО"?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский