3

URLDownloadToFile()を使用して、ゲームの更新ファイルをダウンロードしています。この関数は同期的であるため、別のスレッドで実行し、IBindStatusCallback (具体的には onProgress() 関数) を使用してプログレス バーとキャンセルを処理します。それはうまくいっているようです。

現在、ハングした場合にダウンロードがキャンセルされるように、タイムアウト メカニズムに取り組んでいます。そのため、テスト中に、インターネットを切断してダウンロードを中断しようと考えました。これを行うと、ダウンロードが完全にフリーズし、一見永遠に見えます。URLDownloadToFile は返されません。さらに悪いことに、IBindStatusCallback::onProgress() 関数が再度呼び出されることはありません。これは、プロセスにキャンセルを指示する方法がないことを意味します。

接続が回復すると、ダウンロードが回復する場合もありますが、そうでない場合もあり、永遠にそこに留まります。

これは、そもそもこの手法を使用するべきではないと思いますが、この問題以外は非常にシンプルで機能的です。この問題を回避する方法はありますか?

私は Windows 7 で開発を行っていますが、この問題は Windows の一部のバージョンでは表示されるが、他のバージョンでは表示されない可能性があることを Google で読みました...

編集: おそらく言及する価値があるのは、この関数が Internet Explorer プラットフォーム API の URL モニカー セット (Urlmon.lib 内) に含まれていることです。ダウンロードをキャンセルしたり、別の方法で問題を修正したりするために使用できる API またはコマンドに別の機能がある可能性があります。

4

0 に答える 0