Dzięki olesio przeanalizuje sobie to bo szczerze to pierwszy raz piszę usługę. A tak przy okazji wszystko mi działa tak jak chciałem, tylko mam jeszcze problem przy zatrzymywaniu usługi. Po uruchomieniu usługi startuje sobie wątek z pętlą:
Kopiuj
while Zakoncz <> True do
begin
...
end;
i kończę usługę za pomocą:
Kopiuj
var
GlownyWatek: TNasluchujPolaczenia;
..
procedure TNasluchujPolaczenia.ZatrzymajSerwer;
begin
Self.Zakoncz := True;
end;
procedure TNasluchujPolaczenia.Execute;
begin
while Zakoncz <> True do
begin
..
end;
// po zatrzymaniu uslugi czyli po ServiceStop wszystko co jest za pętlą while się nie wykonuje a usługa się zatrzymuje poprawie z poziomu windowsa
Terminate;
end;
constructor TNasluchujPolaczenia.Create;
begin
inherited Create(False);
FreeOnTerminate := True;
end;
destructor TNasluchujPolaczenia.Destroy;
begin
//tu mam polecenie wpisujące coś do loga i się nie wykonuje
inherited;
end;
procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
if GlownyWatek <> nil then
begin
GlownyWatek.ZatrzymajSerwer;
GlownyWatek := nil;
end;
//w tym miejscu mam wpis do loga i on się pojawia chociaż nie wszystko się wykonało w wątku
end;
A jak wszystko wkleję do zwykłej aplikacji to wszystko działa tak jak trzeba. W usłudze nawet dodałem dodatkową zmienną boolean i pętle while czekająca na wykonanie się Destroy to wtedy zatrzymywanie usługi trwa w nieskończoność i się nie zatrzymuje a w zwykłej aplikacji wszystko jest ok, zatrzymuje się od razu wątek i Destroy też się wykonuje.