Jak w Turbo Pascalu najłatwiej odmierzyć czas pomiędzy dwoma częściami programu? Przykłądowo robie gre i chce sprawdzić ile sekund upłynęło między rozpoczęciem gry, a jej ukończeniem.
Jak odmierzyć czas w Pascalu??
- Rejestracja: dni
- Ostatnio: dni
- Rejestracja: dni
- Ostatnio: dni
- Postów: 54
jak robisz grę... to zapewne korzystasz z tzw. "głównej pętli gry" masz tam pewnie jakiś delay... (niedokładna metoda... ale stosowana...) zliczaj do zmiennej ile razy wykonała się pętla... no i chyba wszystko jasne?! :)
- Rejestracja: dni
- Ostatnio: dni
- Postów: 227
bardzzzzzzo nie dokładna metoda :) trzeba to przyznać bo jak ma gre w której musi układać klocki dajmy na to i czeka na nacisniecie klawisza , to raz nacisnie po sekundzie , raz po kilka , a czasami jak sobie przerwe zrobi :P z wlaczoną grą to po kilku .
- Rejestracja: dni
- Ostatnio: dni
Pascal, tryb rzeczywisty.
function clock:longint;
assembler;
asm
xor ah,ah
int 1ah
mov ax,dx
mov dx,cx
end;
procedure setclock(newstate:longint);
assembler;
asm
mov dx,word ptr [newstate]
mov cx,word ptr [newstate+2]
mov ah,01h
int 1ah
end;
18.2 raza na sekundę zwiększa sie licznik. Wystarczająco dokładne :-)
- Rejestracja: dni
- Ostatnio: dni
Mam nadzieje, ze Ci pomoze, wartosc czas jest modyfikowana co 55ms.
uses
crt;
var
czas: longint absolute 0:$046c;
start: longint;
begin
start:=czas;
repeat
WriteLn('Dzialam ', round((czas - start)*11/200), ' [s]');
until keypressed;
end.
- Rejestracja: dni
- Ostatnio: dni
Dzięki wielkie. Ostatnie 2 rozwiązania odpowiadają temu o co mi chodziło.
- Rejestracja: dni
- Ostatnio: dni
Jest jeszcze lepsze.
Pod 049Ch jest dwordowy timer odliczający w dół w teorii co mikrosekunde. Praktyczna dokladnosc to ok 1 ms co i tak jest znacznie lepsze.
Obsługuje się go przerwaniem 15h z 83h w AH
Startuje się go podając 00h w AL, wartość początkową (dla liczenia czasu najwygodniej FFFFFFFFh) w CX:DX oraz w ES:BX segment i offset 1-bajtowej flagi, której najwyższy bit będzie ustawiony gdy dojdzie do zera. Sukces: CF=0.
Jeśli w AL jest 01h, timer jest zatrzymywany.