データ プル モデルとデータ プッシュ モデル
非同期モニカーのクライアントは、非同期 IMoniker::BindToStorage 操作を実行して非同期通知を受信するために、データ プル モデルとデータ プッシュ モデルのどちらかを選択できます。 データ プル モデルでは、クライアントはバインド操作を実行し、モニカーは読み取り時にのみクライアントにデータを提供します。 つまり、IBindStatusCallback::OnDataAvailable の最初の呼び出しの後、クライアントが既に使用可能なすべてのデータを使用していない限り、モニカーはクライアントにデータを提供しません。
データは要求されたときにのみダウンロードされるため、データ プル モデルを選択するクライアントは、このデータをタイムリーに読み取る必要があります。 URL モニカーを使用したインターネットダウンロードの場合、クライアントが待ち時間が長すぎてより多くのデータを要求すると、バインド操作が失敗する可能性があります。
データプッシュ モデルでは、モニカーによって非同期バインド操作が開始され、新しいデータが利用可能になると常にクライアントに継続的に通知されます。 クライアントは、バインド操作中に任意の時点でデータを読み取るかどうかを選択できますが、モニカーは、バインド操作を完了に追い込みます。
また、非同期モニカーを使用する場合は、メモリ割り当ての COM 規則に従う必要があります。具体的には次のとおりです。
- COM インターフェイスまたは関数呼び出しがクライアントにバッファー (文字列またはその他) を返すたびに、CoTaskMemFree を呼び出してメモリを解放する必要があります。
- COM インターフェイスまたは関数がクライアントからのバッファーを必要とする場合は常に、クライアントは CoTaskMemAlloc を使用してそのバッファーを割り当てる必要があり、呼び出し先はそれを解放する必要があります。
非同期モニカーに渡される文字列またはバッファーを割り当てるときは、必ずこれらの規則に従い、非同期モニカーによって返されるメモリを解放してください。 詳細については、 メモリ割り当ての 管理と関連トピックを参照してください。
関連トピック