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;