非同期操作
アプリケーションがインターネット リソースにアクセスするのにかかる時間は、使用されている接続、リソースが配置されているサーバー、リソースにアクセスしようとしているユーザーの数など、さまざまな要因によって異なります。 複数のリソースをダウンロードしたり、複数のタスク (1 つ以上のダウンロードを含む) を処理したりするアプリケーションの場合、各ダウンロードが完了するのを待ってから次のタスクに進むのは非常に非効率的な場合があります。 アプリケーションが待機する時間を短縮するために、WinINet 関数の多くは非同期的に動作できます。
非同期モードでは、アプリケーションは、パラメーターの 1 つとしてコンテキスト値を含む任意の関数を実行でき、その関数がタスクを完了するまでアプリケーションが待機している間、他のコマンドまたは関数を引き続き実行できます。 タスクの完了中に、アプリケーションによって提供される状態コールバック関数に、タスクの進行状況と完了日時が通知されます。 現時点では、状態コールバック関数は、他の関数を呼び出すか、タスクの完了に依存していた他の必要なタスクを実行できます。
WinINet を非同期的に呼び出す場合、コールバック スレッドの完了はありません。呼び出しは 1 つのスレッドから開始される可能性がありますが、他のスレッドはコールバックを受け取ることができます。
利点
非同期操作にはいくつかの利点があります。 例えば:
複数のインターネット リソースを同時にダウンロードする。
複数のインターネット リソースに同時に接続し、使用可能になったらダウンロードできます。
アプリケーションのパフォーマンスを向上させます。
WinINet 関数を非同期的に使用するアプリケーションは、要求が完了するまで待機する必要がないため、アプリケーションは要求に依存しない他のタスクを自由に実行できるため、アプリケーションの全体的なパフォーマンスが向上します。
ダウンロードの進行状況を監視します。
状態コールバック関数は、要求の処理中に通知を受け取ります。 必要に応じて、アプリケーションは、その状態コールバック関数によって提供される情報を使用して、操作の進行状況についてユーザーに通知し続けたり、完了までに時間がかかりすぎる要求を中断したりできます。
シナリオ
アプリケーションでダウンフォール コーヒー & ティーと Fourth Coffee サイトからコーヒーの価格をダウンロードし、価格を比較する必要があるとします。 Fourth Coffee サイトは通常、応答時間が遅いので、アプリケーションは最初に Downfall Coffee & Tea から情報をダウンロードする必要があります。
アプリケーションの 2 つのバージョンが開発されています。 1つは同期的に動作し、最初にダウンフォールコーヒー & ティーサイトから価格をダウンロードし、次に4番目のコーヒーサイトから価格をダウンロードします。 2 つ目は非同期的に動作し、両方のサイトに要求を送信し、利用可能になったときに価格をダウンロードします。
次の表は、特定の日に Fourth Coffee サイトが高速になった場合の動作を示しています。
出来事 | 同期バージョン | 非同期バージョン |
---|---|---|
始める | ダウンフォールコーヒー & 紅茶にリクエストを送信する | Downfall Coffee & Tea と Fourth Coffee に要求を送信する |
非同期バージョンから Fourth Coffee への要求が完了しました | 待つこと | Fourth Coffee から価格をダウンロードする |
ダウンフォールコーヒー & ティーへのリクエスト完了 | ダウンフォールコーヒー & ティーから価格をダウンロード | ダウンフォールコーヒー & ティーから価格をダウンロード |
ダウンフォールコーヒー & 紅茶の価格がダウンロードされた後 | Fourth Coffee に要求を送信する | 価格の比較 |
非同期バージョンの比較が完了しました | 待つこと | 操作の完了 |
同期バージョンから Fourth Coffee への要求が完了しました | Fourth Coffee から価格をダウンロードする | n/a |
4番目のコーヒーの価格がダウンロードされた後 | 価格の比較 | n/a |
同期バージョンの比較が完了しました | 操作の完了 | n/a |
もう 1 つの例は、Microsoft Internet Explorer などの Web ブラウザーです。 ブラウザーがページをダウンロードするときは、多くの場合、画像やサウンド ファイルなどの他のリソースをダウンロードする必要があります。 非同期モードでは、ページと各リソースを一度に 1 つずつ要求してダウンロードするのではなく、ページとそれに関連付けられているリソースを同時に要求し、使用可能になったときにダウンロードできます。
関連トピック
関連するリンクを次に示します。
チュートリアル
- 状態コールバック関数の作成 の
非同期操作を設定するために必要な関数
非同期的に使用できる関数
- FtpCreateDirectory
- FtpDeleteFile
- FtpFindFirstFile
- FtpGetCurrentDirectory
- FtpGetFile
- FtpOpenFileをする
- FtpPutFile
- FtpRemoveDirectory
- ftpRenameFileをする
- FtpSetCurrentDirectory
- GopherFindFirstFileをする
- GopherOpenFileをする
- HttpEndRequestの
- HttpOpenRequestをする
- HttpSendRequestExの
- InternetConnect
- InternetOpenUrl
- InternetReadFileExの
手記
FtpCreateDirectory、FtpRemoveDirectory、FtpSetCurrentDirectory、FtpGetCurrentDirectory、FtpDeleteFile、および FtpRenameFile 関数は、InternetConnect 関数の呼び出しで指定されたコンテキスト値を使用します。
手記
WinINet では、サーバーの実装はサポートされていません。 また、サービスから使用しないでください。 サーバーの実装またはサービスの場合は、Microsoft Windows HTTP Services (WinHTTP)を使用します。