komunikat z opoznieniem czasowym

0

Witam.
mam Komponent A ktory po wykonaniu zadania wysyla komunikat do komponentu B.
Nastepnie komponent B czeka chwile (ok 1s) i wykonuje jakies zadania.

Czekanie jest zrobione za pomoca TTimer, co nie bardzo mi pasuje.
Czy w Windowsie jest mozliwosc wyslania komunikatu z opoznieniem?
(tzn zeby odbiorca dostal go juz po tej 1s i zebym nie musial robic oczekiwania?)

Aktualnie jest tak(z pewnymi uproszczeniami):

procedure TA.dzialaj;
begin
  {...}
  PostMessage(TB.handle,WM_Command,0,0);  <---- ten komunikat wywoluje
end;

procedure TB.OdbierzKomunikat(var Msg: TMessage);  <----ta procedure natychmiast
var Timer: TTimer;
  procedure Reaguj;   <---- ta procedura wywoluje sie w obsludze timera po odczekaniu 1s
  begin
    //jakies dzialania
    timer.enabled := false;   // to jest zle napisane 
    timer.free;                     // ale nie o to chodzi :P
  end;
begin
  if Msg.Msg = WM_NEXT then begin
    Timer := TTimer.create(nil);
    Timer.interval := 1000;
    Timer.OnTimer := Reaguj;
    Timer.enabled := true;
  end;
end;

A chcialbym zeby bylo jakos tak:

procedure TA.dzialaj;
begin
  {...}
  PostMessage(TB.handle,WM_Command,0,0);   <----------- chcialbym zeby ten komunikat wywolal...
end;

procedure TB.OdbierzKomunikat(var Msg: TMessage);   <-------- ta procedure z 1s opoznieniem
begin
  if Msg.Msg = WM_NEXT then begin
    //jakies dzialania
  end;
end;
0

Może zrób to na zasadzie sprawdzania czasu w systemie z dokładnością do 1sek.

lub

procedure Delay(msec: integer);
var
 FirstTickCount: longint;
begin
 FirstTickCount := GetTickCount;
 repeat
   Application.ProcessMessages;
 until (GetTickCount - FirstTickCount) >= Longint(msec);
end;

Lecz w obydwu przypadkach cała aplikacja zostanie chyba "zamrożona" na czas sprawdzania.

0

z tego co mi wiadomo nie ma w windowsie mechanizmu wysyłania komunikatów z opóźnieniem

0

@Opi
zrobilem taka petle z procesmessage na poczatku, program nie jest 'zamrozony'
ale za to procesor pracuje na pelnych obrotach....

// tak cieżko dodać w środku sleepa na kilka ms? - Ł

aktualnie mam tego timerka ale nie wyglada to zbyt estetycznie (chociaz dziala:-) )

a <ort>z kad</ort> TTimer wie ze uplyna juz zadany czas i ze nalezy wykonac procedure OnTimer?
(po mojemu to dostaje pewnie jakis komunikat - moze udaloby sie jakos spowodowac wyslanie takiego komunikatu dop mojego komponentu...?)

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