![]() |
Bestimmten Thread beende
Hallo ihr lieben,
mein Problem, ist das wenn ich einen Thread Beende per Teminate es sich immer um den zu letzt gestartenden handelt nicht um den, den ich will.! Wie kann ich einen von vielen bestimmten beenden? Starten tu ich nen Thrad so
Delphi-Quellcode:
Beende soif bookliste.Selected <> nil then begin user := Tpop3.Create(true); user.Priority := tpNormal; user.FIndex := bookliste.Selected.Index; user.FreeOnTerminate := True; user.OnTerminate := OnTerminate; user.Resume; end;
Delphi-Quellcode:
ButtonClick user.Terminate; Thread
Delphi-Quellcode:
type
Tuser = class(TThread) private { Private-Deklarationen } protected procedure Execute; override; public FIndex: Integer; S: string; procedure Ausgabe; end; procedure Tuser.Execute; begin User_info.id := FIndex; // BENÖTIGT UM FÜR JEDEN PROCED BESTIMMTE USER DATEN ZU BENUTZEN for i := 1 to Counter do begin if Terminated then begin Synchronize(Ausgabe); Exit; end; Do_other(); end; Synchronize(Ausgabe); end; Das heisst also es können 2 oder X viele Threads laufen je nachdem.... Beim Start und erstellen eines Threads ziehe ich dann die UserDaten heran. In der Form markiert man einen EIntrag X dieser ist gleich eines Datensatzen der INDEX wird übergeben an den Thread und vor Thredsstart die entsprechenden Daten ausgelesen und dann verarbeitet aber das ja auch egal :-) |
Re: Bestimmten Thread beende
Du könntest die Thread-Objekte beim Erstellen in eine Liste (z.B. TList) eintragen und bei OnTerminate wieder austragen.
MfG, Bug |
Re: Bestimmten Thread beende
:wiejetzt: Wäre lieb, wenn Du mir mehr Input dazu geben tätest....
D A N KE |
Re: Bestimmten Thread beende
Schau Dir mal alzaimars
![]() |
Re: Bestimmten Thread beende
Delphi-Quellcode:
Welchen Index du beim Beenden des Threads angibst, hängt davon ab welchen Thread du beenden willst.
var List: TList; // irgendwo create aufrufen nicht vergessen
// ... if bookliste.Selected <> nil then begin user := Tpop3.Create(true); user.Priority := tpNormal; user.FIndex := bookliste.Selected.Index; user.FreeOnTerminate := True; user.OnTerminate := OnTerminate; List.add(user); user.Resume; end; // in OnTerminate List.remove(sender); // das Beenden von einem der Threads (List[{Index}] as TThread).terminate; // beim Beenden des Programms List.free; Ich hoffe das hilft dir und ich mich nicht zu verworren ausgedrückt habe :mrgreen: MfG, Bug |
Re: Bestimmten Thread beende
Hey @BUG der Code ist verständlich.
Doch ein Fehler gibt es
Delphi-Quellcode:
Operator ist auf diesen Operandentyp nicht anwendbar
(List[1] as TThread).terminate;
|
Re: Bestimmten Thread beende
Zitat:
Delphi-Quellcode:
Das müsste jetzt zumindest kompilieren.
TThread(List[{Index}]).terminate;
MfG, Bug |
Re: Bestimmten Thread beende
Ok, das funktioniert.
Soweit alles ok. Allerdings gibt es ein neues Problem. Wenn ich sagen wir 5 Threads habe. Davon beendet sich der erste und der 3. Verutschen alle Threads ja um eine bzw zwei Pisitionen in der TList nach oben. Das heisst, ich weiss nicht mehr welcher Thread wo ist. Denn ich nahm an, dass wenn ich eine ListBox habe In der stehen meine Namen. Doppeklicke ich auf einen, läuft der Thread los. klicke ich wieder auf einen der Namen beendet sich der entsprechende Thread und nahm an, das der Index der NamesListe = der TList ist. DAs ist nicht so. Wie bzw. Woher erfahre ich denn nun, welcher Threaad zu welchem EIntrag in meiner ListBox gehört. Suchte mir schon nen Wolf bei Google aber da ist niee so das was mir hilft, bzw mit dem Beispiel hier passt |
Re: Bestimmten Thread beende
Du wirst die Listbox ja wahrscheinlich selbst befüllen. Wenn Du nun statt Listbox.Items.Add() Listbox.Items.AddObject() verwendest, kannst Du den Thread als Objekt übergeben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz