Con GetTickCount no necesitas un Timer. Aquí tienes un ejemplo sacado de Ians Marteens "midiendo el tiempo con precisión", adaptado por mí:
Código Delphi
[-]
type
TPerformanceTime = Class(TObject)
private
FElapsed: Int64;
FStart, FFinish, FFrec:Int64;
function GetFElapsedTime: String;
public
procedure Start;
procedure Finish;
property ElapsedTime : String read GetFElapsedTime;
end;
implementation
const MiliSegundos = 1000;
procedure TPerformanceTime.Finish;
begin
QueryPerformanceCounter(FFinish);
FElapsed := (FFinish - FStart) * MiliSegundos div FFrec;
end;
function TPerformanceTime.GetFElapsedTime: String;
begin
result := Format(' %d Milisegundos',[FElapsed]);
end;
procedure TPerformanceTime.Start;
begin
QueryPerformanceFrequency(FFrec);
QueryPerformanceCounter(FStart);
end;
Ejemplo de uso:
Código Delphi
[-]
var Counter : TperformanceTime;
begin
Counter := TPerformanceTime.Create;
Counter.Start;
Counter.Finish;
ShowMessage(Counter.ElapsedTime);
Counter.Free;
end;
Como el cronómetro usado es del ordenador, no importa si nuestra aplicación se queda congelada.
Saludos