Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: "Ruckeln" bei bewegten Shapes abstellen

  Alt 20. Okt 2009, 19:18
Zitat von Delphi-Narr:
Die Timer laufen meines Wissens nach parallel...
Die Timer laufen vielleicht paralell, aber Ereignis-Prozeduren laufen sequentiell


Delphi-Quellcode:
procedure Delay(Milliseconds: Integer);
var
  Tick: DWord;
  Event: THandle;
begin
  Event := CreateEvent(nil, False, False, nil);
  try
    Tick := GetTickCount + DWord(Milliseconds);
    while (Milliseconds > 0) and
          (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
    begin
      Application.ProcessMessages;
      if Application.Terminated then Exit;
      Milliseconds := Tick - GetTickcount;
    end;
  finally
    CloseHandle(Event);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Interval := 100;
  Timer2.Interval := 1000;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Memo1.Text := Memo1.Text + '*';
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  Memo1.Text := Memo1.Text + 's';
  Sleep(900);
  Memo1.Text := Memo1.Text + 'e';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Enabled := not Timer1.Enabled;
  Timer2.Enabled := not Timer2.Enabled;
end;
Ausgabe mit Sleep:
die Timer1Proc arbeitet nicht, wärend Timer2Proc aktiv ist = sequentiell
Code:
*********se**se**se**se**se**se*se
Ausgabe mit Delay:
hier ist zwar auch noch alles "sequentiell", außer das Delay (oder besser gesagt Application.ProcessMessages) hier zwischendurch mal die Anfragen abarbeitet.

Wenn etwas wärend wärend Delay länger braucht, dann wird Delay/Timer2Timer auch länger brauchen, bis dieses feritg ist ... eben, da alles nur sequentiell abgearbeitet wird.
(paralell geht mit Threads)
Code:
*********s********e*s********e*s********e*s********e*s********e*s*********es*********e
das sind übriges Beides die Ergebnisse von je 7 Sekunden
$2B or not $2B
  Mit Zitat antworten Zitat