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

Вниз

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

 
serg111111   (2006-03-16 10:24) [0]

Привет умники и умницы :).
Создал сервис как File->New->Other->ServiceApplication, но незнаю как написать обработчик, который проверял бы заланное время с текущим и вслучае совпадения выполнял определенную операцию!


 
Сергей М. ©   (2006-03-16 10:44) [1]

TMyService = class(TService)
..
private
  Timer: TTimer;
  procedure TimerProc(Sender: TObject);
..
end;

procedure TMyService.MyServiceStart(..); //обработчик события OnStart()
begin
FTimer := TTimer.Create(nil);
FTimer.Interval := 1000;
FTimer.OnTimer := TimerProc;
FTimer.Enabled := True;
Started := True;
end;

procedure TMyService.MyServiceStop(..); //обработчик события OnStop()
begin
FTimer.Free;
Stopped := True;
end;

procedure TMyService.TimerProc(Sender: TObject); //обработчик события OnTimer объекта TTimer
begin
 .. читаем тек.сист.время
 .. сравниваем с заданным
 .. и по результатам сравнения выполняем ту самую "определенную операцию"
end;


 
serg111111   (2006-03-16 10:49) [2]

Спасибо!!!!!!!!!!!!!!


 
serg111111   (2006-03-16 11:04) [3]

Что писать в скобочках в процедурах и какого типа Ftimer


 
Сергей М. ©   (2006-03-16 11:10) [4]


> Что писать в скобочках в процедурах


Можешь вообще ничего там не писать - компилятору достаточно корректной декларации этих методов в декларации класса TMyService.

Либо доверься Инспектору Объектов, который при назначении обработчиков сам свормирует все неоходимые "заготовки" методов-обработчиков.


> какого типа Ftimer


private
FTimer: TTimer; //тут первая F была пропущена, мог бы и сам догадаться дописать ее


 
serg111111   (2006-03-16 11:41) [5]

Сергей помоги, как вызвать событие ONstart


 
Сергей М. ©   (2006-03-16 11:48) [6]


> как вызвать событие ONstart


Никак.

Событие не вызывается, оно возбуждается кем/чем-либо.
В данном случае при старте сервиса (например, средствами стандартной консоли управления сервисами) как раз и будет возбуждено это событие, в рез-те чего будет вызван метод MyServiceStart, назначенный тобой в кач-ве метода-обработчика этого события.

Со стопом сервиса все точно так же выглядит.


 
serg111111   (2006-03-16 11:53) [7]

>>MyServiceStart, назначенный тобой в кач-ве метода-обработчика этого события.
А как это сделать?


 
Сергей М. ©   (2006-03-16 12:10) [8]


> serg111111   (16.03.06 11:53) [7]


Ну как ты обычно назначаешь обработчики ? Скажем, обработчик OnCreate какой-либо формы в обычном приложении ? Точно так же и здесь, только вместо формы здесь выступает модуль данных сервиса, созданный сервис-экспертом при создании "заготовки" проекта сервиса ..

Выделяешь мышом окно этого модуля (класс TService есть прямой наследник класса TDataModule, а класс твоего сервиса TMyService как прямой наследник класса TService при этом является непрямым наследником класса TDataModule), переходишь в окно Инспектора Объектов, в закладке Events видишь там кучу событий, в числе которых есть OnStart и OnStop, делаешь мышом даблклик на каждом из них - в рез-те в юните твоего сервиса появляются декларации соотв.методов и корректные "заготовки" их реализации ...


 
serg111111   (2006-03-16 12:15) [9]

Т.е что-то в виде эго-
procedure Tmyservice.ServiceStart(Sender: TService; var Started: Boolean);
begin
myServiceStart;
end;

procedure Tmyservice.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
MyServiceStop;
end;


 
Сергей М. ©   (2006-03-16 12:19) [10]


> Т.е что-то в виде эго


кто такой "эго" ?)

procedure Tmyservice.ServiceStart(Sender: TService; var Started: Boolean);
begin
 ..прямо здесь реализуй вышеупомянутую работу с таймером
end

procedure Tmyservice.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
 .. и здесь тоже самое
end;


 
serg111111   (2006-03-16 12:30) [11]

Но он почему-то не делает то, что я его прошу!
вот весь код сервиса!
unit myservis;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
 ExtCtrls;

type

 Tmyservice = class(TService)
   procedure ServiceStart(Sender: TService; var Started: Boolean);
   procedure ServiceStop(Sender: TService; var Stopped: Boolean);
 private
 ftimer:ttimer;
  procedure TimerProc(Sender: TObject);
     { Private declarations }
 public
   function GetServiceController: TServiceController; override;
           { Public declarations }
  end;

var
 myservice: Tmyservice;
 var f:textfile;
implementation

{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
 myservice.Controller(CtrlCode);
end;

function Tmyservice.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;

procedure Tmyservice.TimerProc(Sender: TObject);
begin
assignfile(f,"log.txt");
append(f);
if datetostr(date)="16.03.2006" then
writeln(f,"good");
closefile(f);
end;
procedure Tmyservice.ServiceStart(Sender: TService; var Started: Boolean);
begin
FTimer := TTimer.Create(nil);
FTimer.Interval := 1000;
FTimer.OnTimer := TimerProc;
FTimer.Enabled := True;
Started := True;
end;

procedure Tmyservice.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
FTimer.Free;
Stopped := True;
end;

end.


 
Сергей М. ©   (2006-03-16 13:04) [12]


> он почему-то не делает то, что я его прошу


Сервис-то инсталлировал как положено ?


 
serg111111   (2006-03-16 13:46) [13]

myservice.exe /install


 
Сергей М. ©   (2006-03-16 13:54) [14]

Ну и ?

Что показывает Service Manager ? Сервис стартует успешно ?


 
serg111111   (2006-03-16 14:07) [15]

Пишу ->myservice.exe /install
Выходит сообщение->SERVICE INSTALLED SUCCESSFULLY


 
Сергей М. ©   (2006-03-16 14:10) [16]


> serg111111   (16.03.06 14:07) [15]


Это ты его только инсталлировал.
А стартовал-то ты его как ?


 
serg111111   (2006-03-16 14:12) [17]

запустил службу Мой компьютер->Управление->Службы и нажал на кнопочку Play


 
Сергей М. ©   (2006-03-16 14:17) [18]


> нажал на кнопочку Play


Так ..

И что ты увидел при этом ?

На основании чего ты посчитал что твой сервис успешно стартовал ?


 
serg111111   (2006-03-16 14:20) [19]

В состоянии написано, что он работает!


 
Сергей М. ©   (2006-03-16 14:34) [20]

Ну а раз работает, то средствами встр.отладчика лови брейкпойнт

procedure TMyService.TimerProc(Sender: TObject);
begin //<-- здесь
..

а дальше средствами того же пошагово проверяй, что там у тебя не слава богу ..

По поводу особенностей трассировки/отладки Делфи-сервисов читай станд.справку на тему "Debugging service applications"/

Да, и не забудь (важно !) установить для своего сервиса опцию взаимодействия с раб.столом.


 
serg111111   (2006-03-16 14:37) [21]

->Да, и не забудь (важно !) установить для своего сервиса опцию взаимодействия с раб.столом.
->КАк?


 
Сергей М. ©   (2006-03-16 14:43) [22]


> КАк?


Каком кверху.

Свойства сервиса в том самом сервис-менеджере разглядывал хоть раз ?


 
serg111111   (2006-03-16 15:38) [23]

А зачем связывать сервис с рабочим сталом?


 
Сергей М. ©   (2006-03-16 15:46) [24]

За надом.

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

TTimer как раз и использует этот механизм.



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

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

Наверх





Память: 0.5 MB
Время: 0.047 c
15-1141829991
tesseract
2006-03-08 17:59
2006.04.02
Project типа manegement :-)


1-1141048869
msgipss
2006-02-27 17:01
2006.04.02
Быстрый экспорт excel документа в html


6-1134443488
SergP
2005-12-13 06:11
2006.04.02
Ограничения wininet на кол-во соединений.


15-1141823371
xayam
2006-03-08 16:09
2006.04.02
Delphi + WebMoney


15-1142180329
Piter
2006-03-12 19:18
2006.04.02
Программа для "замедления" mp3





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский