Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Dealy


Автор: Гость_welt 1.12.2005, 20:58
Есть ли какая-нибудь разница между работой этих кодов?
Что эффективней?????
Код

procedure Delay(ms : Longint);
var
   FirstTick  : longint;
 freq, c1, c2 : LARGE_INTEGER;
            x : Extended;
begin
 QueryPerformanceFrequency(TLargeInteger(freq));
 x:=freq.QuadPart/1000*ms;
 QueryPerformanceCounter(TLargeInteger(c1));
  while(c2.QuadPart-c1.QuadPart < x) do
   QueryPerformanceCounter(TLargeInteger(c2));
end;



Код

procedure Delay(msecs : Longint);
var
   FirstTick : longint;
begin
     FirstTick:=GetTickCount;
     repeat    
       Application.ProcessMessages; {ДМС ФПЗП ЮФПВЩ ОЕ "ЪБЧЕУЙФШ" Windows}
     until GetTickCount-FirstTick >= msecs;
end;

Автор: YurikGL 1.12.2005, 21:11
Второй, вроде лучше.... если я правильно понял, то во втором случае система сможет обрабатывать другие действия и не будет "виснуть"...

Автор: Snowy 1.12.2005, 22:04
Первый более точный, но не имеет смысла, т.к правильнее в данном случае использовать Sleep;
Второй позволяет сделать паузу без приостановки работы приложения, но стоит заменить строку с Application.ProcessMessages на Application.HandleMessage
Кроме того второй вариант не будет работать в программах, не использующих Forms.
Используй Sleep - проще и логичней.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)