// 高精度的延时,精确到Ms , 100ms以内采用,或要求误差极小
// 删除Application.ProcessMessages 影响精度
procedure DelayMsEx(Ms: LongWord);
var
iFreq, iStartCounter, iEndCounter: Int64;
begin
QueryPerformanceFrequency(iFreq);
QueryPerformanceCounter(iStartCounter);
repeat
QueryPerformanceCounter(iEndCounter);
//Application.ProcessMessages;
until ((iEndCounter - iStartCounter) >= Round(Ms * iFreq / 1000 ));
end;
// 精度很低,50ms以外还能凑活
// 及时去除 Application.ProcessMessages 误差也极大
// 仅适用误差要求不高,延时较长的场合
procedure DelayMs(Ms: LongWord);
var
dwStartTime: LongWord;
begin
dwStartTime := GetTickCount;
repeat
Application.ProcessMessages;
until ((GetTickCount - dwStartTime) >= Ms);
end;