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