![]() |
Verwaltung von unbestimmter Anzahl Threads
hallo,
welches ist eine optimale methode, um eine unbestimmte anzahl an threads zu verwalten? es kann ein thread sein, es könnern aber auch zehn sein. ich hatte ein eine ObejctList gedacht. im Create der liste erzeuge ich den thread und speichere ihn mit einer fortlaufenden ID ab. so kann ich auch später bequem drauf zugreifen und ihn beenden. |
AW: Verwaltung von unbestimmter Anzahl Threads
.. im create erzeugst Du eine Instanz von TObjectList.
Wenn Du im create einen Thread erzeugst, hast Du keine unbestimmte anzahl. Ich würde den Thread (separat) erzeugen und mit add an die Liste anhängen.
Delphi-Quellcode:
Grüße
objectList := TObjectList.create(true);
objectList.add(TDeinThreadType.create(false)); Klaus |
AW: Verwaltung von unbestimmter Anzahl Threads
Werden die Threads immer nur in einem Thred erstellt und freigegeben?
Wenn nicht: Es gibt leider keine threadsicher TObjektList, aber wenigstens eine ![]() Das ist eine Liste, auf welche man threadsicher, von unterschiedlichen Threads, zugreifen kann. Oder man nimmt eine TObjektList (mit Generics eine TObjektList<TThread> ) und z.B. eine CriticalSection zum Schutz der Liste. |
AW: Verwaltung von unbestimmter Anzahl Threads
mh also ich habe nun folgendes. das ist nicht perfekt, aber besser kann ich es nicht:
Delphi-Quellcode:
meine thread-klasse:
// ...
uses Unit4; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); // thread starten und in liste einfügen begin ThreadList.Add(TTestThread.Create(Label1)); end; procedure TForm1.Button3Click(Sender: TObject); // thread beenden (?!) und aus liste nehmen begin ThreadList.Delete(0); end; procedure TForm1.FormCreate(Sender: TObject); begin ThreadList := TObjectList.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin ThreadList.Free; end;
Delphi-Quellcode:
erklärung zum sleep:
unit Unit4;
interface uses System.Classes, StdCtrls, SysUtils; type TTestThread = class(TThread) private FMeinString: String; Flbl: TLabel; { Private-Deklarationen } protected procedure Execute; override; public constructor Create(lb: TLabel); virtual; end; implementation uses Unit1; { TTestThread } constructor TTestThread.Create(lb: TLabel); begin inherited Create(False); FMeinString := 'X'; Flbl := lb; end; procedure TTestThread.Execute; var i: Integer; begin Randomize; while not Terminated do begin for i := 0 to 9 do if Terminated then break else sleep(1000); Flbl.Caption := IntToStr(Random(1000)); Synchronize(Form1.Update); end; end; end. ich lasse meinen thread pro schleifendurchlauf (while) eine bestimmte zeit schlafen. damit ich ihn aber nicht "einfriere" und auf einen klick auf einen button, welcher den thread beenden soll, reagieren kann, warte ich 10 mal 1 Sekunde statt 1 mal 10 Sekunden |
AW: Verwaltung von unbestimmter Anzahl Threads
leider habe ich ein kleines problem die threads zu beenden. ich muss während der laufzeit an eine string-variable, welche ich beim anlegen des threads befülle, herankommen.
wie genau mache ich das? die threadklasse sieh so aus wie im post zuvor. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 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