So hat sich doch gelohnt, also vorher waren es ca. 27sek jetzt sind es ca. 15sek. Also fast doppelt so schnell und beide Kerne sind bei voller Last für die Zeit.
Den Zeittest habe ich so gemacht:
Delphi-Quellcode:
[...]
private
{ private declarations }
procedure CountDown(Sender: TObject);
public
{ public declarations }
end;
[...]
{ TForm1 }
var
GThreadCount: Integer = 0;
Gfreq: Int64;
GstartTime: Int64;
GendTime: Int64;
procedure TForm1.CountDown(Sender: TObject);
//Aktion am Ende eines Threads
begin
Dec(GThreadCount);
if ThreadCount = 0
then
begin
QueryPerformanceCounter(GendTime);
ShowMessage('
Die Routine benötigte etwa ' + IntToStr((GendTime - GstartTime) * 1000
div Gfreq) + '
ms');
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
DateienLst: TSearchRec;
Thread1: TMyThread1;
begin
QueryPerformanceFrequency(Gfreq);
QueryPerformanceCounter(GstartTime);
GThreadCount:= 0;
if FindFirst(Directory + '
*.txt', faAnyFile
and not faDirectory, DateienLst) = 0
then
try
repeat
Inc(GThreadCount);
Thread1:= TMyThread1.Create(True);
Thread1.FreeOnTerminate := True;
Thread1.FDateienname:= Directory+DateienLst.
Name;
Thread1.OnTerminate:= @CountDown;
// Prozedur die beim beenden des Threads ausgeführt wird
Thread1.Resume;
until FindNext(DateienLst) <> 0;
finally
SysUtils.FindClose(DateienLst);
end;
end;
Um die Threads zu beschränken habe ich hier diese nützliche
Unit mal benutzt (
http://www.delphipraxis.net/93835-wo...tml#post637044), da habe ich aber noch keinen Zeittest hinbekommen.
@creed steiger Danke für den Hinweis, ich weiß aber nicht wo ich den ExitStatus abfragen soll damit ich ihn für den Zeittest benutzen kann und kann man die Anzahl auch irgenwie begrenzen der Prozesse, ohne alzu großen Aufwand?