AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Indy10: TIdIOHandler.ReadLn hängt Programm auf
Thema durchsuchen
Ansicht
Themen-Optionen

Indy10: TIdIOHandler.ReadLn hängt Programm auf

Ein Thema von Angel4585 · begonnen am 3. Aug 2010 · letzter Beitrag vom 4. Aug 2010
 
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

Indy10: TIdIOHandler.ReadLn hängt Programm auf

  Alt 3. Aug 2010, 09:25
Hallo,

in einem eigenständigen Thread verwende ich eine Ableitung von TIdTCPClient.
Der Thread selbst durchläuft in seiner Execute Methode eine Schleife
Delphi-Quellcode:
procedure TClientReader.Execute;
var
LReadString : AnsiString;
begin
while not Terminated do
  begin
  sleep(10);
  try
    if Assigned(FClient)and Assigned(FClient.IOHandler)and FClient.Connected then
      try
        FClient.IOHandler.ReadTimeout:=1000;//Test
        LReadString:= FClient.IOHandler.ReadLn;//Hier hängt sich das Programm einfach auf
        if(Length(Trim(LReadString))>0)then
          begin
          if Assigned(FClient.ReaderEvent)then
            begin
            FClient.ReaderEvent(LReadString);
            end;
          end;
      except
        on e : EIdClosedSocket do SNLogger.Log('TClientReader.Execute:EIdClosedSocket:'+e.ClassType.ClassName+':'+e.message);
        on e : EIdReadTimeout do SNLogger.Log('TClientReader.Execute:EIdReadTimeout:'+e.ClassType.ClassName+':'+e.message);
        on e : EIdException do SNLogger.Log('TClientReader.Execute:EIdException:'+e.ClassType.ClassName+':'+e.message);
        on e : exception do SNLogger.Log('TClientReader.Execute:Exception:'+e.ClassType.ClassName+':'+e.message);
        end;
  except
    on e : exception do
      begin
      SNLogger.Log('TClientReader.Execute:'+e.ClassType.ClassName+':'+e.Message);
      exit;
      end;
    end;
  end;
An der markierten Stelle hängt sich das Programm einfach auf, wenn ich die Zeile auskommentier funktioniert es perfekt.
Es kommt keine Exception
Das Programm hängt sich auch nicht bei jedem Durchlauf auf, sondern erst nach einiger Zeit.
Ich habe wie ihr seht ein Timeout probiert, jedoch ohne Erfolg.
Jetzt ist mir eingefallen, dass TIdAntiFreeze für solche Fälle nützlich sein kann und ich hab eins auf das Formular der Unit gezogen, in der dieser Thread verwendet wird, allerdings auch ohne Erfolg.
Ich bin mir jetzt nicht sicher wie das TIdAntiFreeze arbeitet, ob ich das in diesem Fall woanders einfügen muss.

Habt Ihr eine Idee warum sich das Programm da aufhängt?
Es hängt sich auch nur unter Windows XP auf, unter Windows 7 hatte ich bisher keine Probleme.
Martin Weber
Ich bin ein Rüsselmops

Geändert von Angel4585 ( 3. Aug 2010 um 10:12 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz