Einzelnen Beitrag anzeigen

Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

[Indy10] ReadLn bei Client im Thread

  Alt 11. Feb 2007, 10:43
Hi,

Ich habe vor eine Art Chat zu schreiben.
Dazu ist es natürlich von Nöten dass der Server auch mal was an den Client schickt. Aber wie?

Ich habe mich jetzt ein halbes wochenende durch jegliches Beispiel gelesen, welches Ich zu Indy10 gefunden hab und dazu NICHTS gefunden.
Die einzige Lösung, die Indy10 bereit hält ist offensichtlich folgende:

Delphi-Quellcode:
Client.IOHandler.WrtieLn('Hallo');
Res:=Client.IOHandler.ReadLn;
Das ist natürlich extrem praktikabel und total sinnvoll *Ironie bis Galgenhumor*

Was ich brauche ist im Prinzip ein Event welches ausgelöst wird sobald der Client eine Nachricht empfangen hat.

Ich habe mal in einer Randbemerkung etwas von einem Thread gehört mit welchem das gehen soll...
Das habe ich so versucht:
(Ich muss direkt dazu sagen dass ich mit Threads noch nicht die große Ahnung hab....)
Delphi-Quellcode:
procedure TClientThread.Execute;
var L: String;
begin
  Self.Priority:=tpLower;
  while not Terminated do
  begin
    Sleep(100);
    if not Assigned(FIO) then Continue;
    L:=FIO.ReadLn;
    ShowMessage(L);
    if Assigned(FOnInput) then FOnInput(L);
  end;
end;
Delphi-Quellcode:
//OnCreate der MainForm
  CT:=TClientThread.Create(True);
  CT.Suspend;
  CT.OnInput:=OnClientInput;
  CT.IOHandler:=Client.IOHandler;
  CT.Resume;
Nun ist es nur leider so dass offensichtlich im Thread nichts passiert...
Auch wenn ich nach dem Sleep eine hübsche ShowMessage einbaue: nix

Wenn ich dann versuche das ganze wieder zu beenden mit
Delphi-Quellcode:
  CT.Suspend;
  CT.Terminate;
  CT.Free;
Hängt das Programm....




Woran liegt das?
Geht das mit den Indys vielleicht nicht doch einfacher?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat