3

私たちのプログラムでは、HTTP リクエストが必要になるたびに新しいスレッドが作成され、複数のスレッドが同時に実行される可能性があります。私が抱えている問題は、2 つのスレッドが既に実行されている場合、それらがを呼び出しInternetReadFile()た後にからの読み取りをループしているHttpSendRequest()場合、その後の呼び出しの試みはHttpSendRequest()その呼び出しでハングするだけなので、前述の 2 つのスレッドが継続してしまうことです。接続からの読み取りは問題ありませんが、3 番目の接続はタイムアウトにHttpSendRequest()なるまでブロックされます。

私が自分で見つけたものから、HTTP 仕様が推奨するように、これが wininet の動作方法のように思えます: "

さまざまなプログラムが同じサーバーへの複数の同時ダウンロードを処理するのを見てきましたが、さまざまな接続を管理したり、独自の http インターフェイスを作成したりするという点で、それを行うには多くの追加作業を行う必要があると思います。

2 つ以上のアクティブなセッションを処理するようにセットアップするのにさらに複雑さが必要になる場合は、一度に 1 つまたは 2 つのファイルのみを処理するように変更し、残りはキューに入れておきます。ただし、一度に2つ以上を許可する複雑さの少ない方法があれば(私の頭の中で、ダウンロードごとに新しいプロセスを使用するとうまくいくと思いますが、面倒になるでしょう)、それが望ましいでしょう。いずれにせよ、同時に 3 ~ 5 を超えるダウンロードが行われるわけではなく、各ダウンロードはユーザーの要求に応じて行われます。制限を変更するためのレジストリ ハックについての言及をいくつか読みましたが、それは間違いなく私が行うことではありません。何か案は?

4

2 に答える 2

5

HTTP 1.1 標準では、サーバーごとに最大 2 つの同時接続が義務付けられています。IE5、IE6、または IE7 がインストールされている場合、それらがインストールする WinInet のバージョンでは、InternetSetOption() を使用して制限を増やすことができます (INTERNET_OPTION_MAX_CONNS_PER_SERVER および INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER オプションを参照してください)。ただし、IE8 と共にインストールされる WinInet のバージョンでは、明らかにその機能が無効になっています ( http://connect.microsoft.com/WNDP/feedback/ViewFeedback.aspx?FeedbackID=434396およびhttp://connect.microsoft.com/を参照)。 WNDP/feedback/ViewFeedback.aspx?FeedbackID=481485 )。

于 2009-11-06T01:30:37.943 に答える
-1

複数回呼び出す場合は、によって返されるInternetOpen()それぞれに2つのファイルを同時にダウンロードできるはずです。HINTERNETInternetOpen()

于 2009-11-05T23:11:36.710 に答える