Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi [Indy10] ReadLn bei Client im Thread (https://www.delphipraxis.net/86217-%5Bindy10%5D-readln-bei-client-im-thread.html)

glkgereon 11. Feb 2007 09:43


[Indy10] ReadLn bei Client im Thread
 
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?

p0w3r5tr34m3r 11. Feb 2007 09:54

Re: [Indy10] ReadLn bei Client im Thread
 
versuch doch mal Application.ProcessMessages vor dem sleep() Command

glkgereon 11. Feb 2007 10:06

Re: [Indy10] ReadLn bei Client im Thread
 
Zum einen ändert es nichts
Zum anderen wäre es ziemlich unsinnig einen Thread zu nehmen wenn ich dann noch Application.Processmessages mache (oder sehe ich das falsch :?: )


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz