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