AGB  ·  Datenschutz  ·  Impressum  







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

Prozedur als Thread laufen lassen

Ein Thema von DelphiPeter · begonnen am 18. Aug 2008 · letzter Beitrag vom 19. Aug 2008
Antwort Antwort
DelphiPeter

Registriert seit: 21. Dez 2007
Ort: Iserlohn
198 Beiträge
 
Delphi 2010 Professional
 
#1

Prozedur als Thread laufen lassen

  Alt 18. Aug 2008, 14:20
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
Peter Majewski
  Mit Zitat antworten Zitat
Benutzerbild von Weazy
Weazy

Registriert seit: 7. Apr 2005
Ort: Bern (Schweiz)
414 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Prozedur als Thread laufen lassen

  Alt 18. Aug 2008, 14:34
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...
Philippe Wechsler
  Mit Zitat antworten Zitat
dasPeter

Registriert seit: 15. Aug 2008
6 Beiträge
 
#3

Re: Prozedur als Thread laufen lassen

  Alt 18. Aug 2008, 14:40
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.
  Mit Zitat antworten Zitat
Benutzerbild von Weazy
Weazy

Registriert seit: 7. Apr 2005
Ort: Bern (Schweiz)
414 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Prozedur als Thread laufen lassen

  Alt 18. Aug 2008, 15:13
...oder/und zu begin ListView.Items.BeginUpdate und am Schluss ListView.EndUpdate aufrufen...
Philippe Wechsler
  Mit Zitat antworten Zitat
DelphiPeter

Registriert seit: 21. Dez 2007
Ort: Iserlohn
198 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Prozedur als Thread laufen lassen

  Alt 19. Aug 2008, 05:43
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
Peter Majewski
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
417 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Prozedur als Thread laufen lassen

  Alt 19. Aug 2008, 06:05
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
  Mit Zitat antworten Zitat
DelphiPeter

Registriert seit: 21. Dez 2007
Ort: Iserlohn
198 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Prozedur als Thread laufen lassen

  Alt 19. Aug 2008, 07:14
Super, danke. Werde das ganze mal durchtesten und ausprobieren.

Peter
Peter Majewski
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Prozedur als Thread laufen lassen

  Alt 19. Aug 2008, 08:40
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
Jürgen Höfs
  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 04:32 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