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?
http://smallbusiness.chron.com/chang...ons-45899.html
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:
idhttp.Disconnect(True);
idhttp.IOHandler.InputBuffer.Clear;
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
Ein Ansatz zur Umsetzung ist aber eventuell garnicht so weit:
Thread + Timer, Einbinden von TimerThread.pas bzw. im Ursprung:
http://www.delphipraxis.net/1270100-post13.html