Help - timing ve W95

Petr Krc pekr
Středa Březen 17 11:54:36 CET 2004


Pavel Vagner wrote:

> Nevi nekdo nahodou,jak generovat presne casove intervaly ve
> Windows 95,98.(Komponenta Timer ve Delphi neni to prave
> orechove)Kdyby byl i nejaky utrzek zdrojaku,byl bych velice
> vdecen.

Slova Windows a presnost se navzajem vylucuji. Vetsinou plati:
bud to bude pod Windows, nebo to bude presne ;).
Ovsem pokud jde o DELPHI, tak by tu jedno reseni bylo:

--- cut ---
var I2C_delay_: longint;
    I2C_frequency_: longint;           {Pozadovana frekvence}
    I2C_CPU_frequency_: tlargeinteger;
    
  QueryPerformanceFrequency(I2C_CPU_frequency_);
  if I2C_frequency_ = 0 then I2C_frequency_:=1;
  I2C_delay_:=trunc(comp(I2C_CPU_frequency_) / I2C_frequency_);


procedure I2C_pause;
var t1,t2:TLargeInteger;
begin
  QueryPerformanceCounter(t1);
  repeat
   QueryPerformanceCounter(t2);
   if abs(comp(t2)-comp(t1))>=I2C_delay_ then exit;
  until false;
end;
--- cut ---

Nezaruci to ze ta pauza nebude delsi (napr. kdyz se Windows rozhodnou
swapovat), ale zaruci ze nebude kratsi, nez pozadovany interval (coz
bylo v tomhle pripade cilem).

Jeste jedna poznamka: funkce QueryPerformanceFrequency
a QueryPerformanceCounter jsou zrejme nedokumentovane (alespon
ja o nich v helpu nenasel ani zminku) a IMHO pracuji s internim
citacem CPU, ktery je AFAIK vysadou procesoru pentium a vyssich.

-- 
Regards
           Petr Krc







Další informace o konferenci Hw-list