インターネットからファイルをダウンロードしたいのですが、これは簡単な作業だと思います。いくつかの異なるアプローチを試してみると、それぞれに独自の欠点があることがわかりました。主な問題は次のとおりです。
- ファイルをダウンロードするまでアプリケーションがフリーズする
- インターネット接続が失われた場合/サーバーが応答しない場合、アプリケーションは永久にフリーズします。
(詳細:
HTTP経由でインターネットからファイルを取得する方法は?
インターネットからファイルをダウンロードしている間、接続はタイムアウトしません)
それで、ついに私は何人かの人々から得た提案を使って、Indyのような「プロ」ライブラリを使用しました。ただし、Indyは、私が試したコードよりもはるかに優れているわけではありません(ただし、はるかに大きく、保守が困難です)。Indyを使用している間、アプリケーションは短時間だけフリーズするわけではないので、それでも(どういうわけか)使用できます。ただし、ダウンロードが完了するまでアプリケーションをシャットダウンすることはできません(インターネット接続が切断された場合はシャットダウンできません)。
他の人々も同じ問題を報告しました:http://borland.newsgroups.archived.at/public.delphi.internet.winsock/200609/0609079112.html
https://forums.embarcadero.com/thread.jspa?threadID=25199&tstart= 90
それで、それを機能させるために私がTIDAntiFreezeにやらなければならなかったいくつかのハッキングがありますか?
また、ConnectTimeoutプロパティは認識されません。
fIDHTTP := TIDHTTP.Create(NIL);
fIDHTTP.ConnectTimeout:=5000;
Indyを削除して、ファイルを別のスレッドにダウンロードするという元のアイデアに戻り、応答しないときにスレッドを終了する必要があります(少なくとも、この方法でサードパーティのライブラリを削除します)。これを行うと、予期しない副作用が発生しますか?
使用:Delphi 7、Indy 10.1.5 10.5(おそらく)。
ありがとう