![]() |
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 |
Re: Prozedur als Thread laufen lassen
Du kannst das ganze über einen TThread laufen lassen.
Delphi-Quellcode:
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...
var
Thread:TThread; begin Thread:=TThread.Create(True); Thread.OnExecute:=deineProzedur; Thread.resume; end; |
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.
|
Re: Prozedur als Thread laufen lassen
...oder/und zu begin ListView.Items.BeginUpdate und am Schluss ListView.EndUpdate aufrufen...
|
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 |
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 |
Re: Prozedur als Thread laufen lassen
Super, danke. Werde das ganze mal durchtesten und ausprobieren.
Peter |
Re: Prozedur als Thread laufen lassen
also mir hat folgender Beitrag (und Code) sehr geholen:
![]() 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 21:04 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