![]() |
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Schau dir die OmniThreadLib mal bitte an.
Mit der kann man einfacher Multithreaded programmieren. Mit einer Collection (hier die Dateinamen rein) und dem ForEach wäre dir gelaube ich ganz gut geholfen. ![]() |
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Hey danke nochmal für die vielen Antworten, ich hab es jetzt mal (trotz allen bedenken) mit einem Thread-Objekt (noch etwas unfertig) gemacht. Das ganze wird so in einem Bruchteil erledigt. Hier mal der Code.
Wie gesagt noch nicht ganz fertig... Wie kann man die Zeit von dem ganzen Ablauf Messen ? Vorher habe ich das mit dem QueryPerformanceCounter gemacht in der ButtonClick Prozedur. Aber die Threads verfälchen das ganze doch ? Schneller ist es aufjedenfall, das sehe ich schon allein wie schnell der Output da ist.
Delphi-Quellcode:
type
TMyThread1 = class (TThread) private protected procedure Execute; override; public FDateienname: String; end; { MyThread1 } procedure TMyThread1.Execute; var AProcess: TProcess; begin AProcess := TProcess.Create(nil); try AProcess.Executable := ExtractFilePath(application.ExeName)+'Umwandler.exe'; AProcess.Parameters.Add(FDateienname); AProcess.Options := AProcess.Options + [poWaitOnExit, poNoConsole]; AProcess.Execute; finally AProcess.Free; end; end; procedure TForm1.Button8Click(Sender: TObject); var DateienLst: TSearchRec; Thread1: TMyThread1; begin if FindFirst(Directory + '*.txt', faAnyFile and not faDirectory, DateienLst) = 0 then try repeat Thread1:= TMyThread1.Create(True); Thread1.FDateienname:= Directory+DateienLst.Name; Thread1.Resume; until FindNext(DateienLst) <> 0; Thread1.FreeOnTerminate := True //?? finally SysUtils.FindClose(DateienLst); end; end; |
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Ja, der Unterschied ist jetzt, dass du nicht mehr auf Beendigung der Threads wartest. :-D
Ich weiß nicht, ob du das wirklich wolltest? |
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Nein wollte ich nicht. Aber anders ist die erste Version immer abgestürzt....
|
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Das FreeOnTerminate gehört in die Schleife, sonst gilt es nur für die als letztes erzeugte Thread-Instanz.
Zitat:
Daß du nicht auf das Ende der jeweiligen Threads wartest, wurde ja schon gesagt. |
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Zitat:
|
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Stand nicht irgend wann mal in einer Delphi Docu, dass mehr als 16 Thread es langsammer machen?
Mavarik |
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Ja, und da steht auch drin, dass man mindestens 90MHz auf seiner CPU haben sollte wenn seine Form transparent machen möchte.
|
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Zitat:
|
AW: Kein wirklicher Geschwindigkeitsvorteil durch Threads?
Das mit den 16 Threads hab ich auch vor kurzem irgendwo gelesen...
Ahh hier war es ![]() " Auf einem Ein-Prozessor-System stellen 16 aktive Threads die praktikable Obergrenze dar. " |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:06 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