Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Prozedur als Thread laufen lassen (https://www.delphipraxis.net/118952-prozedur-als-thread-laufen-lassen.html)

DelphiPeter 18. Aug 2008 14:20


Prozedur als Thread laufen lassen
 
Hallo zusammen!

Ich habe eine Prozedur, die eine Liste abarbeitet. Würde gerne diese Liste schneller abarbeiten und die prozedur als Threads nebeneinander laufen lassen. Ist das so ohne weiteres möglich? Ich möchte die Anzahl der Threads auf 3 begrenzen.

Habe leider noch nie sonst mit Threads arbeiten müssen, bin daher sehr unerfahren was diese Thematik angeht.

Sag schonmal danke für eure Hilfe!

Peter

Weazy 18. Aug 2008 14:34

Re: Prozedur als Thread laufen lassen
 
Du kannst das ganze über einen TThread laufen lassen.

Delphi-Quellcode:
var
  Thread:TThread;
begin
  Thread:=TThread.Create(True);
  Thread.OnExecute:=deineProzedur;
  Thread.resume;
end;
Bedenke allerings das deine Prozedur Threadsicher sein muss! Schreibt deine Prozedur also sowas wie ListView.items.add(''), so musst du das umschreiben in Thread.Synchronize(Thread,Thread.addToListView('') ) oder sowas...

dasPeter 18. Aug 2008 14:40

Re: Prozedur als Thread laufen lassen
 
Wenn du tatsächlich ein ListView abarbeitest (oder ähnliches) kann ich dir noch raten, die Liste während des Vorgangs unsichtbar (visible := false) zu machen - auf diese Weise erziehle ich eine enorme Verbesserung im Punkt Geschwindigkeit.

Weazy 18. Aug 2008 15:13

Re: Prozedur als Thread laufen lassen
 
...oder/und zu begin ListView.Items.BeginUpdate und am Schluss ListView.EndUpdate aufrufen...

DelphiPeter 19. Aug 2008 05:43

Re: Prozedur als Thread laufen lassen
 
Also eine Listview habe ich eigentlich nicht.

Die Prozedur läuft in einem Dienst. Wie kann ich denn nun die Anzahl der gleichzeitigen Threads begrenzen? Gibts in einem TThread auch ein "afterwork"-Event oder sowas? Dann könnte ich ja eine Zählervariable nutzen.

Kenne mich leider mit der ganzen Thematik nicht aus.

Peter

ULIK 19. Aug 2008 06:05

Re: Prozedur als Thread laufen lassen
 
Da sich die Threads ja nicht von selbst erstellen sondern Du sie selbst erzeugen musst, kannst Du doch selbst etscheiden, wieviele Threads erzeugt werden. Und das 'afterwork' heisst OnTerminate :-)

Grüße,
Uli

DelphiPeter 19. Aug 2008 07:14

Re: Prozedur als Thread laufen lassen
 
Super, danke. Werde das ganze mal durchtesten und ausprobieren.

Peter

Pfoto 19. Aug 2008 08:40

Re: Prozedur als Thread laufen lassen
 
also mir hat folgender Beitrag (und Code) sehr geholen:
http://www.delphipraxis.net/internal...t=workerthread

Damit kannst du einen Pool an Threads verwalten. Die Aufgaben
holen sich die Threads aus einer Liste.

Gruß
Pfoto


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 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