Hi,
msgWaitforMultipleObjects benötigt bis zu 20 Sekunden nach Beendigung des letzten Thread um WAIT_OBJECT_0 zurückzugeben sonst wird immer nur WAIT_TIMEOUT zurückgegeben.
Das passiert aber nur mit DualCores auf den Single Cores sieht alles normal aus.
Die Hauptanwendung läuft auf beiden Cores und die Threads werden auf verschiedene Cores verteilt.
Delphi-Quellcode:
repeat
// Auf Threads warten
dwWaitResult := msgWaitforMultipleObjects(length(ThreadArray), ThreadArray, true, 100, QS_ALLINPUT);
if dwWaitResult <> WAIT_OBJECT_0
then
begin
StatusbarUpdate;
// Statusbar updaten / Progress berechnen
pmShowErrors.Enabled := bError
and (tvSourceDestination.FocusedNode <>
nil);
mmShowErrors.Enabled := pmShowErrors.Enabled;
Application.ProcessMessages;
// GUI aktualisieren
end;
until dwWaitResult = WAIT_OBJECT_0;
// keinen Threads mehr zum warten
P.S.: Auch wenn nur ein Core von der Anwendung benutzt wird, tritt das Problem auf.