Ich habe den Eindruck, dass die Reihenfolge bei Deinem Beispiel nicht sinnvoll ist:
Du vertrödelst Zeit mit dem Application.ProcessMessages; nachdem Du das Resultat schon hast...
Delphi-Quellcode:
var
lnTickCount: LongInt;
begin
lnTickCount := GetTickCount;
repeat
Application.ProcessMessages;
until ((GetTickCount - lnTickCount) >= LongInt(iMSecs));
end;