Zamykanie watka, aplikacji

0

Witam mam problem z wylaczeniem aplikacji. Daje application.terminate; i program znika z pulpitu jednak w procesach nadal widnieje. Problem stanowi watek, ktory odwoluje sie do komponentow indy 9, poniewaz gdy go nie towrze aplikacja zamyka sie prawidlowo. Ponizej zamieszczam watek:

  TKlientPrzyjmuje = class(TThread)
    private
    AktywnaP: TPrzesylka;
    procedure Action;
    protected
    procedure Execute; override;
  end;

Z kolei watek tworzy kod:

   KlientPrzyjmuje := TKlientPrzyjmuje.Create(true);
   KlientPrzyjmuje.FreeOnTerminate := true;
   KlientPrzyjmuje.Resume;

probowalem juz przed procedurea apllication.terminate;
wstawiac kod:

KlientPrzyjmuje.Suspend;

albo

KlientPrzyjmuje.Destroy;

albo

KlientPrzyjmuje.Terminate;

chociaz to i tak jest bez sensu (bo na poczatku: KlientPrzyjmuje.FreeOnTerminate := true) to nie pomaga. Wie ktos moze o co tu chodzi ? z gory dzieki za posty

0

wywal z wątku tworzenie komp. Indy i wszelkie odwołania do nich i zobacz czy tak będzie OK. 99% że teraz będzie śmigać aż miło

0

Najlepiej przepisz z jakiejś mądrej książki wątek i jego kończenie.
Obsłuz terminate, lecz pamiętaj że terminate nie kończy wątku ale sygnalizuje watkowi że ma juz się kończyć - wątek działa w pętli i skończy się dopiero (o ile masz w execute odpowiedni warunek pętli) gdy zauwazy terminate. Poza tym pamiętaj że jeśli dasz suspend to wątek się zawiesi a nie skonczy i nie zareaguje na terminate. Wątek by się zakończył musi byc "chodzący".
Dokładniej watek to "program" działający sobei spokojnie w tle, a dokładniej wykonujący procedurę Execute. Wszystki odwołania do neigo są posrednie - jeśli dajesz terminate to tak naprawdę ustawiasz zmienną która sygnalizuje wątkowi że ma się kończyć (o ile masz standarowo zapięta pętlę w execute). Co więcej ten warunek jest tylko w pętli i jesl izamkniesz apliakcję to osierocisz watek który będzie działał dalej. Jesli dasz suspend wstrzymujesz wykonywanie wątku, a zarazem sprawdzanei warunku wyjscia z petli - czyli jesli dasz suspend, terminate to dopóki nie dasz resume watek bedzie wisial.

1 użytkowników online, w tym zalogowanych: 0, gości: 1