Jak odmierzyć czas w Pascalu??

Jak odmierzyć czas w Pascalu??
LI
  • Rejestracja: dni
  • Ostatnio: dni
0

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.

MG
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 54
0

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?! :)

RobinMaster
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 227
0

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 .

flabra
  • Rejestracja: dni
  • Ostatnio: dni
0

Pascal, tryb rzeczywisty.

Kopiuj
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 :-)

foflik
  • Rejestracja: dni
  • Ostatnio: dni
0

Mam nadzieje, ze Ci pomoze, wartosc czas jest modyfikowana co 55ms.

Kopiuj
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.

LI
  • Rejestracja: dni
  • Ostatnio: dni
0

Dzięki wielkie. Ostatnie 2 rozwiązania odpowiadają temu o co mi chodziło.

pq
  • Rejestracja: dni
  • Ostatnio: dni
0

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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.