AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Threads richtig beenden, wie? <<Solved>>
Thema durchsuchen
Ansicht
Themen-Optionen

Threads richtig beenden, wie? <<Solved>>

Ein Thema von xxl1 · begonnen am 17. Jun 2006 · letzter Beitrag vom 18. Jun 2006
Antwort Antwort
xxl1

Registriert seit: 21. Apr 2006
88 Beiträge
 
FreePascal / Lazarus
 
#1

Threads richtig beenden, wie? <<Solved>>

  Alt 17. Jun 2006, 21:57
Hallo zusammen,
ich möchte einen thread beenden den ich zuvor hiermit gestartet habe:
Delphi-Quellcode:
T:=TNetThread.create(false);
T.Resume;
der thread führt folgendes aus:
Delphi-Quellcode:
procedure TNetThread.Execute;
  begin
...
while not terminated do
Winsock_listen; //steht für die listen funktion von winsock
end;
beendet sollte er hiermit werden:
Delphi-Quellcode:
T.Suspend;
T.Terminate;
T.free;
Dies funktioniert allerdings nicht, der thread bleibt in der schleife hängen, auch wenn der benutzte socket mit
closesocket(s); beendet wird.
Dieser wird auch tatsächlich geschlossen!
Bitte um hilfe. Danke schonmal an alle Hilfsbereiten!
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#2

Re: Threads richtig beenden, wie?

  Alt 17. Jun 2006, 22:21
Du musst das Terminate setzen,
Dann warten bis der Thread Terminiert ist.
Das Suspend ist dann meiner Meinung nach Überflüssig.

mfG

Markus

EDIT: Alternativ machst du FreeOnTerminate auf true und gibst dann das Temrinate-Kommando.
Markus
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#3

Re: Threads richtig beenden, wie?

  Alt 17. Jun 2006, 22:33
Ein Thread hat selbstständig mitzukriegen, wann er terminiert wird. Von daher ist ein .Suspend eher kontraproduktiv: es hält den Thread an. Lässt du es weg, läuft er weiter, kriegt nen Listen-Timeout und springt aus der While-Schleife raus. Wenn danach nix mehr kommt, killt sich der Thread.
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#4

Re: Threads richtig beenden, wie?

  Alt 17. Jun 2006, 22:34
Zitat von markusj:
Das Suspend ist dann meiner Meinung nach Überflüssig.
Nein das ist nicht nur überflüssig sondern genau der Fehler da wenn du den Thread pausierst dann tut der ganz genau gar nichts also terminiert er sich auch nicht.

Aber in deinem Fall ist es wahrscheinlich besser so: (was markusj schon angeschnitten hat)
Delphi-Quellcode:
T:=TNetThread.create(false);
T.FreeOnTerminate := true;
T.Resume;
Dann brauchst du zum beenden nur noch:
T.Terminate; Dann wird er nämlich automatisch freigegeben

//edit: Mist zu spät aber wo war die rote Box?
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#5

Re: Threads richtig beenden, wie?

  Alt 17. Jun 2006, 22:36
*hüstel*
Ich schreib SUSPEND! nicht RESUME ...
Wenn er den Thread einschläfert, kann der nicht merh reagieren ... SUSPEND = Einfschläfern ...

mfG

Markus
Markus
  Mit Zitat antworten Zitat
xxl1

Registriert seit: 21. Apr 2006
88 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Threads richtig beenden, wie?

  Alt 18. Jun 2006, 15:58
Danke für die Hilfe!
Das T.FreeOnTerminate := true; hat geholfen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz