AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bestimmten Thread beende

Offene Frage von "delphinia"
Ein Thema von delphinia · begonnen am 9. Nov 2008 · letzter Beitrag vom 9. Nov 2008
Antwort Antwort
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#1

Bestimmten Thread beende

  Alt 9. Nov 2008, 14:14
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:
  
if 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;
Beende so
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
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

Re: Bestimmten Thread beende

  Alt 9. Nov 2008, 14:22
Du könntest die Thread-Objekte beim Erstellen in eine Liste (z.B. TList) eintragen und bei OnTerminate wieder austragen.

MfG,
Bug
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Bestimmten Thread beende

  Alt 9. Nov 2008, 14:24
Wäre lieb, wenn Du mir mehr Input dazu geben tätest....
D A N KE
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Bestimmten Thread beende

  Alt 9. Nov 2008, 14:32
Schau Dir mal alzaimars Workerthread an. Von jbg gibt es da auch noch was, hab aber im Moment den Namen nicht im Kopf.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#5

Re: Bestimmten Thread beende

  Alt 9. Nov 2008, 15:22
Delphi-Quellcode:
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;
Welchen Index du beim Beenden des Threads angibst, hängt davon ab welchen Thread du beenden willst.

Ich hoffe das hilft dir und ich mich nicht zu verworren ausgedrückt habe

MfG,
Bug
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Bestimmten Thread beende

  Alt 9. Nov 2008, 18:51
Hey @BUG der Code ist verständlich.
Doch ein Fehler gibt es


(List[1] as TThread).terminate; Operator ist auf diesen Operandentyp nicht anwendbar
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#7

Re: Bestimmten Thread beende

  Alt 9. Nov 2008, 18:57
Zitat von delphinia:
(List[1] as TThread).terminate; Operator ist auf diesen Operandentyp nicht anwendbar
Ops, das kommt davon wenn man nicht ausprobiert was man postet TThread(List[{Index}]).terminate; Das müsste jetzt zumindest kompilieren.

MfG,
Bug
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
delphinia

Registriert seit: 16. Feb 2006
444 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Bestimmten Thread beende

  Alt 9. Nov 2008, 20:29
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
Doreen
Gruss Doreen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Bestimmten Thread beende

  Alt 9. Nov 2008, 20:32
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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 08:38 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