Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Thread Verständnis Frage (https://www.delphipraxis.net/156048-thread-verstaendnis-frage.html)

youuu 18. Nov 2010 08:49

AW: Thread Verständnis Frage
 
Delphi-Quellcode:
NebenThread.Klasse.SourceKat:= GetSource(NebenThread.Klasse.slkat[Fo]+'-'+IntToStr(i));
mochte er nicht.
Wie kann ich das besser lösen? Die Klasse im Konstruktor den KindThreads mitgeben?

Ok, nun klappt es sobald ich die Klasse mit gebe im konstruktor.
Allerdings habe ich nun trotzdem ein weiteres Problem, wie kann ich nach Beendigung der sehen, wann alle Threads fertig sind?

Mit OnTerminate eine Methode bauen die im Nebenthread solange läuft bis alle gestarteten Threads zuende sind?

dominikkv 18. Nov 2010 11:04

AW: Thread Verständnis Frage
 
Ich löse das, indem ich eine globale Variable habe, die mir die Anzahl der gerade laufenden Threads anzeigt. Der Thread erhöht diese im Constructor und erniedrigt sie im Destructor. Mit TCriticalSection den Zugriff absichern (oder InterlockedIncrement / InterlockedDecrement). Oder wie gesagt das OnTerminate-Ereignis ausnutzen (wird im Kontext des VLC-Threads ausgeführt).

Klaus01 18. Nov 2010 11:16

AW: Thread Verständnis Frage
 
.. Du könntest die Threads auch in ein TObjectList (OwnsObject = true) stecken.
Die Anzahl der Threads kannst Du dann mit TObejctList.count abfragen, denn die Threads
fliegen dann wenn sie terminieren automatisch aus der TObjectList.

Grüße
Klaus

Bummi 18. Nov 2010 15:17

AW: Thread Verständnis Frage
 
@Klause01

bist Du sicher ... ich kann mir nicht vorstellen daß die Threads sich bei Terminierung aus der Objektliste entfernen.

Delphi-Quellcode:
Var
o:TObjectList<TButton>;

procedure TForm1.Button1Click(Sender: TObject);
var
  b:TButton;
begin
   o:=TObjectList<TButton>.Create;
   o.OwnsObjects := true;

   o.Add(TButton.Create(self));
   o.Add(TButton.Create(self));
   b := o[0];
   b.Free;
   Caption := IntToStr(o.Count);
// knallt natürlich  o[0].Parent := self;
end;

Klaus01 18. Nov 2010 15:24

AW: Thread Verständnis Frage
 
Zitat:

Zitat von Bummi (Beitrag 1062395)
@Klause01

bist Du sicher ... ich kann mir nicht vorstellen daß die Threads sich bei Terminierung aus der Objektliste entfernen.

ups, hast recht.
OwnsObject gibt ja nur die Objekte/Instanzen frei wenn die Liste freigegeben wird.
Danke.

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:58 Uhr.
Seite 2 von 2     12   

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