Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi ReadLn im Thread wird nicht ausgeführt (https://www.delphipraxis.net/137272-readln-im-thread-wird-nicht-ausgefuehrt.html)

Lord_stelzer 17. Jul 2009 13:04


ReadLn im Thread wird nicht ausgeführt
 
Hallo,
Ich habe ein Programm mit IdTCPCLient und eins mit IdTCPServer
Der Client schickt über diesen Thread jede Sekunde etwas an den Server
Nun habe ich am Server einen Button und bei Klick soll auch etwas an den Clienten geschickt werden.
Nur muss ich ganz oft auf den button klicken und dann wird es vielleicht beim 10. mal oder so mal gesendet und empfangen.


Thread.Execute:
Delphi-Quellcode:
procedure TMain.Execute;
begin
while not Terminated do
Begin
  S := FormatDateTime('hh:nn:ss', Time);
  hour1:=strtoint(copy(S, 1, 2));
  min1:=strtoint(copy(S, 4, 2));
  sek1:=strtoint(copy(S, 7, 2));
  sekunden1:=hour1*3600+min1*60+sek1;
  time1:=Trunc(sekunden1-sTime);
  nTime:=timetostr(secondstotime(time1));
  synchronize(Update);

  IdTCPClient.Host := GetIp(Host);
  IdTCPClient.Port := Port;
  try
  IdTCPClient.Connect(100);
  IdTCPClient.WriteLn(floattostr(time1));
  status := IdTCPClient.ReadLn('', 5);
  synchronize(poststatus);
  IdTCPClient.Disconnect;
  except
  Synchronize(Soff);
  end;
  sleep(1000);
end;
end;
IdTCPServer.Execute
Delphi-Quellcode:
procedure TForm1.IdTCPServer3Execute(AThread: TIdPeerThread);
begin
TCP3:=AThread.Connection.ReadLn;
AThread.Connection.WriteLn(Status3);
label16.caption:=TimeToStr(secondstotime(strtoint(TCP3)));
status3:='';
end;
Könnt ihr mir ne bessere Methode nennen das zu verwirklichen?

jfheins 17. Jul 2009 13:28

Re: ReadLn im Thread wird nicht ausgeführt
 
Welche Indy-Version ist das? Es sieht aus, wie die 9er Version aber sicher bin ich mir nicht :gruebel:

Ansonsten liegts wahrscheinlich daran:
Delphi-Quellcode:
 
  status := IdTCPClient.ReadLn('', 5);
Ein Timeout von 5 Millisekunden (?) könnte etwas zu kurz sein...

Lord_stelzer 17. Jul 2009 13:32

Re: ReadLn im Thread wird nicht ausgeführt
 
ja ist die 9er...
wenn ich das von 5 hochsetze passiert auch bloß nichts oder der rest des programms wird nicht mehr ausgeführt
ich habs schon mit zig Werten bis 10000 probiert nix war besser... kommt auf dasselbe hinaus

Lord_stelzer 17. Jul 2009 14:35

Re: ReadLn im Thread wird nicht ausgeführt
 
Wie so oft hab ich selber das Problem gefunden^^

Ich hab das sleep(1000);
raus gemacht und beim Connect von 100 auf 1000 hochgesetzt
dann wartet er nicht mehr mit der schleife sondern während der Verbindung ;)

himitsu 17. Jul 2009 15:39

Re: ReadLn im Thread wird nicht ausgeführt
 
eventuell war das Sleep garnichtmal sooo schlecht.
Wen die Verbindung gut/schnell ist, kann sich da ganz schö was an Traffic ansameln, wenn ununterbrochen was gesendet wird.

Lord_stelzer 17. Jul 2009 17:12

Re: ReadLn im Thread wird nicht ausgeführt
 
hmm aber ReadLn funzt ja nur während des connects... und weil der server nicht immer Online ist würde der ander Code ja nicht ausgeführt werden bzw. sehr haken... oder eben Das ReadLn funzt nicht

jfheins 17. Jul 2009 17:56

Re: ReadLn im Thread wird nicht ausgeführt
 
Achja, nowas: Du musst nicht für jede Meldung den tcpclienet erstellen, was senden, wieder trennen & freigeben - du kannst einmal am Anfang verbinden und dann jede Sekunde was senden und dann irgendwann beenden. Du kannst ja mal probieren, ob das was ausmacht ;)

Lord_stelzer 20. Jul 2009 10:14

Re: ReadLn im Thread wird nicht ausgeführt
 
ne das geht eben nicht
Der Server ist ja nicht immer an! und er soll trotzdem weiterhin senden falls der Server mal wieder On kommt
an einen Server der nicht vorhanden ist kann ich ja nicht connecten ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 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