[pascal] wywoływanie procedury co określony czas

0

Witam,

Mam problem do zrealizowana, jest to moje zadanie zaliczeniowe. Do stworzenia mam program który będzie dizłąął na zasadzie "gra w życie" (jest opisana na wikipedii). jako że nie lubie od razu brac gotowca, chce sam to zrobic. podstawowe rzeczy jakie zrobilem to losowe rozrzucenie obiektów na podanej części okienka.

procedure kolo;
var
i:integer;
begin
setcolor(3);
fori:=1 to 150 do
circle(random(320),random(240),3);
end;

i mam problem bo potrzebuję tą procedurę wywoływac np co 5 sekund i nie mam pojęcia jak sie do tego zabrac. probowalem z implementaca takiej funkcji:

uses Dos;
function t:Longint;
var H,M,S,St:Word;
 GetTime (H,M,S,St);
 t := H*360000 + M*6000 + S*100+ St;
end;

ale to nic nie pomogło, jedynie wyrzycalo mi czas w ktorym procedura kolo została wywolana.
proszę o pomoc - wskazówki, co zrobi aby procedura kolo wywoływała sie samoczynnie co 5 sekund.

Pozdrawiam!

0

nie chodziło mi dokładnie o odmierzanie czasu trwania procedury, bo to zrobiem i w zasadzie to nic nie wnosiło do zadania, chodzi mi o cykliczne powtarzanie określonej procedury. jakąs petelke powtarzająca sie co jakisc czas(domysnie 5 sec). pozdrawiam

PS, dodam ze jestem studentem zaocznym i zadanie zaliczeniowe jest w trybie graph, którego w ogole nie omawialismy, ani procedur czasowych tez w ogóle nie było, takze prosze o wyrozumiałosc, jestem w kropce.

0

W pascalu, moduł DOS masz dwie funkcje GetIntVec i SetIntVec. Nimi możesz podpiąć pod przerwanie zegarowe (1Ch) dowolną funkcję (bezparametryczną). Przerwanie to wywoływane jest ~19/s więc możesz sobie w liczniku zliczać ilość wywołań i dla 95 (około 5s) wywołać funkcję.

Tu masz wygrzebany z przepastnych głębi mego dysku programik z jakichś laborek. To nie to, ale masz przykład (działający) podpicia się pod zegarek.

uses
 crt, dos;

var
 i:integer;
 st:string;

procedure Opuznienie; interrupt;
begin
 i:=i+1;
end;

procedure MyRead(var s:string; sec:byte);
var
 t:boolean;
 c:char;
 w:pointer;
begin
 t:=true;
 GetIntVec($1C,w);
 SetIntVec($1C,@Opuznienie);
 while i<(sec*19) do
  if keypressed then
   begin
    c:=readkey;
    if c=#13 then break;
    if t then
     begin
      s:=c;
      t:=false;
      i:=0;
     end
    else
     begin
      s:=s+c;
      i:=0;
     end;
    write(c);
   end;
 SetIntVec($1C,w);
 writeln;
end;

begin
 clrscr;
 st:='niezdazyles!';
 writeln('podaj jakis tekst, masz na to 3 sekundy');
 MyRead(st,3);
 writeln('wpisales: ',st);
 readln;
end.

1 użytkowników online, w tym zalogowanych: 0, gości: 1