Entwickler-Ecke

Internet / Netzwerk - IdTCPClient, AntiFreeze und trotzdem geordnete Kommunikation


Gausi - So 05.08.07 10:56
Titel: IdTCPClient, AntiFreeze und trotzdem geordnete Kommunikation
Hab da mal wieder ein kleines neues Problemchen. Mein TCP-Client fragt regelmäßig beim Server diverse Sachen nach. während dieser Zeit ist dann die Anwendung blockiert. Merkt man z.B., wenn man die Form verschiebt - die bleibt dann kurz hängen. Jetzt gibts ja bei den Indys diese AntiFreeze-Komponente, die das verhindert. Klappt auch - nur leider zu gut. Denn wenn ich während einer solchen automatischen Abfrage (per Timer) eine weitere per Buttonklick starte, oder zu wild auf den Buttons rumklicke, dann quatschen die einzelnen Anfragen durcheinander, was natürlich nicht gut ist. Wie kann man das beheben?

Ständig einen Flag umsetzen in der Art


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
var busy: Boolean;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // Automatische Abfrage dann einfach abbrechen
  if busy then exit;
  busy := True;
  // Kommuniziere mit Server
  busy := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
var t: Integer;
begin
  t := 0;
  // ggf. Warten, bis automatische Anfrage fertig ist
  if busy then
  repeat
    delay(100);
    inc(t);
  until (not busy) or (t > 20);

  if not busy then
  begin
    busy := True;
    // Kommuniziere mit Server
    busy := False;
  end;
end;


Oder gibt es da eine andere einfachere Möglichkeit?


arj - So 05.08.07 13:34

Wieso lagerst du die Kommunikation nicht in einen extra thread aus?
Dann solltest du diese Probleme nicht haben.