Kilka timerów

0

Jeśłi mam kilka timerów na formatce to żadne z nichnie działa prawidłowo odmierzajc z podanym interwałem - tzn odmierza dwa razy szybciej. I tteraz pytanie czym zastapić standartowego timera tak by mogł "taktować" nie wpływajac na inne timery? Albo co należy zrobić by te timery co już mam nie wpływały na siebie wzajemnie.

0

Najłatwiej zastąpić timera wątkiem i dac sleep'a jako interwała :). O wątkach znajdziesz artykuł... Nie rozumiem, dlaczego one nawzajem na siebie wplywaja? Nigdy sie nie spotkałem z czyms takim :)

0

one zazwyczaj odliczają czas jak im się podoba (np u mnie często odliczają czas 3 razy szybciej jak ruszam myszką po formie :-| ), nie ma co im ufać, ale jeśli fucktycznie wpływają na siebie to możesz ustawić jednego timera na ich wspólny NWD i zwiększać w nim licznik i odpalać odpowiednie procedury przy określonych warunkach, np

var Form1: TForm1;
  licznik: integer = 0;
  TimerEnabled: array[0..2] of boolean;

...

procedure TForm1.Button1Click(Sender: TObject);
begin
  TimerEnabled[0] := not TimerEnabled[0];
end;

procedure WykonajProcedure;
begin
  ShowMessage('Yellow !');
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Inc(licznik);
  if((licznik * Timer1.Iterval) mod 500 = 0) and TimerEnabled[0] then WykonajProcedure;
  if((licznik * Timer1.Iterval) mod 750 = 0) and TimerEnabled[1] then WykonajProcedure2;
  if((licznik * Timer1.Iterval) mod 1000 = 0) and TimerEnabled[2] then WykonajProcedure3;
end;
0

Rozwiazałem problem stawiaj jednego timera i dodaja do jego funkcji zminną typu boolean, i po prostu timer taktuje co 1000ms i w kazdym takcie sprawdza czy zminna jest true. jeśłi jest to zgodnie z warunkiem wykonuje oparacje jeśłi nie to idzie dalej. Rozwiaznaie całkiem dobre - a mi dokładne taktownie nie jest potrzebne

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