Autor Beitrag
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: So 05.08.07 10:56 
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

ausblenden 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?

_________________
We are, we were and will not be.
arj
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 378

Win XP/Vista, Debian, (K)Ubuntu
Delphi 5 Prof, Delphi 7 Prof, C# (#Develop, VS 2005), Java (Eclipse), C++, QT, PHP, Python
BeitragVerfasst: So 05.08.07 13:34 
Wieso lagerst du die Kommunikation nicht in einen extra thread aus?
Dann solltest du diese Probleme nicht haben.