![]() |
AW: IdHTTP Get im Thread sofort unterbrechen?
Zitat:
Zitat:
|
AW: IdHTTP Get im Thread sofort unterbrechen?
Wenn Windows wartet, dann wartet Windows. Erst wenn das mit der Warterei fertig ist, kannst Du im Programm reagieren, nur dass das dann sowieso schon reagiert.
Solange von Windows nix kommt, wird onWork nicht aufgerufen, da ja nicht "geworkt" wird. Von daher hilft es nichts, wenn man da Disconnect aufruft und/oder 'ne Exception wirft. OnWork eignet sich für Fortschrittsanzeigen ..., also alles, was man bei funktionierender Arbeit machen kann. Das ist beim TimeOut aber nicht gegeben. Mir ist momentan kein Weg bekannt, wie man da "mal eben" rauskommt. Eventuell dasda? ![]() Eventuell mal mit windows internet timeout bei der Suchmaschine Deiner Wahl stöbern gehen. In 'nem threadlosen Programm hab' ich das etwas unelegant gelöst: Es gibt da 'nen Timer, im OnWorkBegin wird er eingeschaltet und im OnWorkEnd wieder ausgeschaltet. Der hat ein Interval von 15 Sekunden. Wenn er "zuschlägt" wird im Timerereignis sowas gemacht:
Delphi-Quellcode:
Wenn Du den Timer und sein Ereignis mit in den Thread nehmen kannst, könnte das ja eventuell ein Lösungsansatz sein. Ob der gut ist, entscheiden bitte andere, mit Threads hab' ich es nicht so ;-)
idhttp.Disconnect(True);
idhttp.IOHandler.InputBuffer.Clear; Ein Ansatz zur Umsetzung ist aber eventuell garnicht so weit: ![]() ![]() |
AW: IdHTTP Get im Thread sofort unterbrechen?
So ganz verstehe ich nicht was es mit "
![]() Für mich ist das nur ein TThread mit Events zum Warten statt mit einem Sleep(1234). |
AW: IdHTTP Get im Thread sofort unterbrechen?
Wenn/da Indy bestimmt ReadFile und WriteFile für das Auslesen/Senden des TCP-Datenstroms verwendet, kann man sowas z.B. über
![]() ![]() ![]() Aber hier wartet es ja schon beim Öffnen der Verbindung (ala CreateFile oder so) und da gibt es keinen Abbruchbefehl, aber hier sollte man irgendwo auch den passenden Timeout einstellen können (denk ich mir). |
AW: IdHTTP Get im Thread sofort unterbrechen?
Zitat:
|
AW: IdHTTP Get im Thread sofort unterbrechen?
Vielleicht bin ich nicht so schlau, aber wie soll man das konkret prüfen? Was er macht ist doch völlig legitim. Oder muss er vor dem Prüfen "ob eine Internetverbindung besteht" dann noch prüfen ob überhaupt eine Netzwerkkarte im PC steckt? Und davor prüfen ob ...
|
AW: IdHTTP Get im Thread sofort unterbrechen?
Da Indy benutzt wird, ist auch der TIdIcmpClient vorhanden. Damit kann man ein Ping absetzen. Beim Programmstart oder an geeigneter Stelle:
Delphi-Quellcode:
IdIcmpClient.Host := 'www.delphipraxis.net'; // Oder der Host, bei dem per Get Daten geholt werden sollen.
Try IdIcmpClient.Ping; Except on e : Exception do begin MessageDlg(e.Message,mtError,mbOk,0); // Oder dafür sorgen, dass der Thread irgendwie erfährt: // Die Internetverbindung funktioniert nicht so recht. end; end; // und die Ereignisroutine zum IdIcmpClient: procedure TForm1.IdIcmpClientReply(ASender: TComponent; const AReplyStatus: TReplyStatus); begin // Hier den Thread starten ... end; |
AW: IdHTTP Get im Thread sofort unterbrechen?
Zitat:
![]() Die Pascal-Unit erhält man über Delphi IDE -> Component -> Import Component -> Import a Type Library -> Network List Manager 1.0 Type Library Dieser hat zwei praktische Getter/Properties, um Netwerk- und Internet-Konnektivität zu prüfen. |
AW: IdHTTP Get im Thread sofort unterbrechen?
Zitat:
Könnte man ja vorher Pingen (aber da gibt´s ja auch einen Timeout :p) Ansonsten dürfte das hier wohl keine große Verzögerung ergeben ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 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