This should work (it's simple, without timer component):
var
EndTime: TDateTime;
begin
...
EndTime := Now + EncodeTime(0, 0, 0, 500); // 0 hours, 0 minutes, 0 seconds, 500 miliseconds - you put what you want.
While Now < EndTime do
Application.ProcessMessages; // while this code is waiting, let the other application's code work.
// Here put the code which will execute after waiting time has passed.
...
end;