Zitat von
RWarnecke:
Ich habe es jetzt mal probiert, wenn ich den Wert von 100ms runtersetze auf 5. Dann geht es schneller.
Was meine Vermutung bekräftigt, dass du aus den Threads heraus auf die
GUI zugreifst.
Zitat von
RWarnecke:
Damit liegst Du richtig. Ich setze diesen Code in meinem Projekt CopyAndSync ein. Das auslesen der Dateien erfolgt aber nicht über FindFirst / FindNext, sondern über eine
Unit aus dem Synchronisationstool
Pegasus von Luckie.
Auch der benutzt Find First/Next
Zitat von
RWarnecke:
Das mit der Variable oder Message verstehe ich da noch nicht ganz.
Ich übergebe dem Thread einen Pointer auf eine in meiner Hauptanwendung definierten String den ich dann einfach im Thread mit Meldungen fülle:
Delphi-Quellcode:
// Im Hauptprog
SearchForCopy := TSearchCopy.Create(false);
SearchForCopy.FreeOnTerminate := False;
SearchForCopy.Message := @MessageString;
Delphi-Quellcode:
//im Thread
Message^ := 'Kopiere Datei xyz';
Und setze dann diese Meldung alle 100ms in meine Anzeige:
if dwWaitResult <> WAIT_OBJECT_0 then
begin
Label1.Caption := MessageString;
Application.ProcessMessages; //
GUI aktualisieren
end;
Frei getippt!
p.s.: Es scheint ein Problem mit meinem Code (vor allem mit dem fWaitAll) zu geben schau mal hier:
msgWait... sollte aber nicht weiter schlimm sein.
Damit gehts.
dwWaitResult := WaitforMultipleObjects(length(ThreadArray), @ThreadArray, true, 100);