t := timeGetTime;
While timeGetTime-t > 2000 do
begin
 Application.ProcessMessages;
 Sleep(1);
end;
なんてのが現実的な使い方なんじゃないの。
考え無しにやるとバグるけど。