Форум: "Основная";
Текущий архив: 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.044 c