AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit TIdHTTP.Get ?

Offene Frage von "nru"
Ein Thema von nru · begonnen am 22. Jan 2013 · letzter Beitrag vom 24. Jan 2013
 
nru

Registriert seit: 30. Mai 2008
Ort: Bonn
40 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit TIdHTTP.Get ?

  Alt 22. Jan 2013, 07:40
Hallo zusammen,

in meinem D7-Projekt (RSSFeed-Reader) werden mehrere Threads gestartet, die parallel RSS-Feeds abrufen. In unregelmäßigen Abständen und nicht vorhersehbar kommt es zu Abstürzen, die leider so nicht reproduzierbar sind. Das macht die Sache natürlich nicht gerade einfacher.

Die Beschreibung im Windows-Ereignisdienst sagt:
Code:
Aus einem der folgenden Gründe kann nicht auf die Datei "" zugegriffen werden: Es besteht ein Problem mit der Netzwerkverbindung, dem Datenträger mit der gespeicherten Datei bzw. den auf dem Computer installierten Speichertreibern, oder der Datenträger fehlt. Das Programm TSRSS.exe wurde wegen dieses Fehlers geschlossen
In der Anwendung wird, nach Prüfung der Erreichbarkeit der url ein get aufgerufen. Das alles ist in den Threads auch schon in try/except Blöcken gekapselt.
Alle Threads arbeiten nach dem folgenden Prinzip (Auszug aus dem Execute()). CallMessageFunc() sendet eine Nachricht über SendMessage() an den Mainthread, rein aus Dokumentationszwecken und um dem Problem auf den Grund zu gehen. Bei jedem Programmabbruch mit Ereignisdiensteintrag war diese Logzeile "VOR dem Get" das letzte, was die Anwendung noch getan hat. Deshalb meine Vermutung, dass mir das .get() hier Probleme bereitet. Ich verwende Indy10.

Delphi-Quellcode:
      // Erreichbarkeit des RSSFeeds prüfen. Falls nicht Thread kontrolliert beenden
      // Exceptions werden dort abgefangen und in CallErrorFunc gewandelt
      if (not Terminated) then begin
        if not CheckURL then
          exit;
      end;


      try
        CallMessageFunc( 'FeedThread #' + IntToStr( FID ) + ' ('+FeedName+') VOR dem Get', True );
        Fhttp.get( FRSSLink, msData );
      except
        on E:Exception do
          CallErrorFunc( e.message + ' [TFeedThread.Execute/FHttp.Get]');
      end;
Delphi-Quellcode:
function TFeedThread.CheckURL: Boolean;
begin
  try
    FHTTP.Head( FRSSLink );
    if (FHTTP.ResponseCode <> 200) then begin
      raise Exception.Create( 'Probleme mit dem Netz! Fehler: ' + FHTTP.ResponseText );
    end;
    result := True;
  except
    on E:Exception do begin
      CallErrorFunc( e.message + ' - ' + FHTTP.ResponseText + ' [TFeedThread.CheckURL]' );
      result := False;
    end;
  end;
end;

Aber wo könnte dieses Problem herkommen und warum kümmert sich der Fehler scheinbar einen Dreck um das Exception-Handling?

Was kann ich noch tun, um diesem Problem Herr zu werden?


Dank & Gruss
Norbert
  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 19: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