ich habe einmal die
Unit Dienst mit diesen drei Funktionen:
Delphi-Quellcode:
//Initialisierung des Services
procedure Service.ServiceStart(Sender: TService; var Started: Boolean);
begin
//hier Aufruf des Threads
TMThread:= Thread.Create(false);
end;
//DeInitialisierung des Services
procedure Service.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
if Assigned(TMThread) then
begin
{TMThread.Terminated;}
TMThread.Terminate;
//Freigeben des Threads
FreeAndNil(TMThread);
end;
end;
//Steuerung des Dienstes
procedure Service.ServiceExecute(Sender: TService);
begin
//solange nicht beendet wurde
while not Terminated do
ServiceThread.ProcessRequests(True);
end;
aus einem anderen Programm wird die Methode ServiceStart aufgerufen zum starten des Dienstes und die Methode ServiceStop, um den Dienst zu stoppen
Dann gibt es die
Unit Thread mit diesen Funktionen:
Delphi-Quellcode:
constructor Thread.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
Priority := tpLowest;
end;
procedure Thread.Execute;
begin
FormCreate;
while not Terminated do
TimerTimer(self);
Timer.Free;
ClockTimer.Free;
end;
procedure Thread.Terminate;
begin
Interrupted:= true;
while not(BlockAbarbeitungFertig) do
begin
sleep(1000);
end;
FormCloseQuery;
end;
In Thread.Execute wird die Methode TimeTimer aufgerufen, die auch wieder andere Funktionen aufgeruft. Wenn dort irgendwo dann ein Fehler auftritt, dann soll sich der Dienst beenden. Wie mache ich das?