Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Wird auf procedure gewartet ?

  Alt 23. Okt 2011, 03:51
Ohne mehr Infos zu SendeDaten() kann man nicht mehr sagen.
Nun folgende Frage. Innerhalb der for Schleife wird ja immer solange gewartet bis die procedure SendeDaten fertig ist.
Ohne die procedure SendeDaten zu kennen kann hier nur ein ja kommen.
Denn SendeDaten wird im HauptThread abgearbeitet, und der arbeitet erst weiter, wenn eben 3x SendeDaten durchlaufen wurde.

Ich bin aber völlig bei dir, dass ein Timer mit 20ms mehr als fragwürdig ist
Vor allem weil die Gefahr besteht, dass der Timer die Warteschlange so vollmüllen wird, dass die Anwendung einfach immer nur das TimerEvent aufrufen wird

Ein mögliche (nicht schöne aber besser laufende) Lösung ist den Timer für die Dauer der Verarbeitung ausser Gefecht zu setzen
Delphi-Quellcode:
MySendTimer.Enabled := False;
try
  for i := 1 to 3 do
  begin
    SendeDaten( i );
  end;
finally
  MySendTimer.Enabled := True;
end;
Noch besser wäre es, das in einen Thread zu packen:
Delphi-Quellcode:
procedure TMySendThread.Execute;
begin
  while not Terminated do
  begin

    for i := 1 to 3 do
    begin
      SendeDaten( i );
    end;

    if not Terminated then
      // wirklich schlafen wird der nicht ;o)
      // aber er ist halt stets bemüht
      Sleep( 20 );
  end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat