AGB  ·  Datenschutz  ·  Impressum  







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

Threads in Listbox verwalten

Ein Thema von MarLe · begonnen am 23. Sep 2014 · letzter Beitrag vom 23. Sep 2014
Antwort Antwort
MarLe

Registriert seit: 13. Jan 2005
83 Beiträge
 
Delphi XE2 Professional
 
#1

Threads in Listbox verwalten

  Alt 23. Sep 2014, 15:53
Delphi-Version: XE2
Hallo zusammen,

wie verwalte ich mehrere Threads über eine Listbox?

... so starte ich (vereinfacht dargestellt):
Code:
var
  xThread: TMyThread;
 
procedure TForm1.ButtonStartClick(Sender: TObject);
begin
  xThread := TMyThread.Create;
  xThread.FreeOnTerminate := True;

  inc(iTNr);
  xThread.Nr := iTNr;
  xThread.Id := xThread.ThreadID;  //nur zur Thread Unterscheidung
  xThread.Start;

  ListBox1.Items.AddObject('Thread ' + IntToStr(iTNr), xThread);
  ...
... das Stoppen ausgewählter Threads haut noch nicht hin ?!?
Code:
procedure TForm1.ButtonStopClick(Sender: TObject);
begin

  if ListBox1.ItemIndex > -1 then
  begin

    xThread.Terminate;  //stoppt nur den letzten!!!

    ListBox1.Items.Delete(ListBox1.ItemIndex);
    ...
Wie komme ich da an das hinterlegte Objekt? (hab da was von Casten gelesen, kann es aber in der Syntax nicht umsetzen)

Gruß MarLe
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

AW: Threads in Listbox verwalten

  Alt 23. Sep 2014, 16:04
Wenn Du das Objekt mit
ListBox1.Items.AddObject('Thread ' + IntToStr(iTNr), xThread); in der ListBox hinterlegst, müsstest Du mit
(ListBox1.Items.Objects[ListBox1.ItemIndex] as TMyThread) wieder herankommen.
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 baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Threads in Listbox verwalten

  Alt 23. Sep 2014, 16:09
Mit casten meinst du wahrscheinlich so:

Delphi-Quellcode:
  xThread := TMyThread(ListBox1.Items.Objects[ListBox1.ItemIndex]);
  xThread.Terminate;
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
MarLe

Registriert seit: 13. Jan 2005
83 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Threads in Listbox verwalten

  Alt 23. Sep 2014, 16:22
Funzt Danke, so habe ich es jetzt stehen:
Code:
(ListBox1.Items.Objects[ListBox1.ItemIndex] as TMyThread).Terminate;
Was mich jetzt wundert dass er damit auch gleich den Eintrag aus der ListBox nimmt?!?

Gruß MarLe
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Threads in Listbox verwalten

  Alt 23. Sep 2014, 16:26
Am besten ist es natürlich so etwas nicht mit einer ListBox zu verwalten.

Dafür schafft man sich einen Kontext, der auch länger als das Formular lebt und verwaltet die Threads dort. Wenn man das jetzt in einer ListBox anzeigen möchte, nun einfach machen ... aber direkt damit koppeln ist immer der Anfang vom Ende
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Threads in Listbox verwalten

  Alt 23. Sep 2014, 16:28
Was mich jetzt wundert dass er damit auch gleich den Eintrag aus der ListBox nimmt?!?
Das liegt ganz bestimmt an dieser Zeile
ListBox1.Items.Delete(ListBox1.ItemIndex);
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
MarLe

Registriert seit: 13. Jan 2005
83 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Threads in Listbox verwalten

  Alt 23. Sep 2014, 16:50
Zitat:
Das liegt ganz bestimmt an dieser Zeile
ListBox1.Items.Delete(ListBox1.ItemIndex);
Stimmt, das hatte ich doppelt drin!

Zitat:
Am besten ist es natürlich so etwas nicht mit einer ListBox zu verwalten.
Ok, das habe ich mir schon gedacht dass es da was Besseres gibt.
Ich will mich ja steigern, der nächste Versuch wäre die Verwaltung über eine ObjectList.
Da gibt es ja eine alte und eine neue mit Generics, typsicher habe ich gelesen.
Hast du da vielleicht ein Anschauungsbeispiel wie man das richtig macht.
Ich will eigentlich nur x-Threads starten, aber gezielt einzelene wieder stoppen.
Mir geht's jetzt mehr ums Verständnis wie man das sauber macht.

Gruß MarLe

Geändert von MarLe (24. Sep 2014 um 15:16 Uhr)
  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 20:30 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