Поделиться через


Модель извлечения данных и модель отправки данных

Клиент асинхронного моникера может выбрать модель отправки данных и отправки данных для управления асинхронной операцией IMoniker::BindTo служба хранилища и получением асинхронных уведомлений. В модели извлечения данных клиент управляет операцией привязки, а моникер предоставляет данные клиенту только по мере чтения. Другими словами, после первого вызова IBindStatusCallback::OnDataAvailable моникер не предоставляет никаких данных клиенту, если клиент не использовал все данные, которые уже доступны.

Так как данные загружаются только по мере запроса, клиенты, которые выбирают модель извлечения данных, должны своевременно считывать эти данные. В случае загрузки Из Интернета с помощью моникеров URL-адресов операция привязки может завершиться ошибкой, если клиент ожидает слишком долго, прежде чем запрашивать дополнительные данные.

В модели отправки данных моникер управляет асинхронной операцией привязки и постоянно уведомляет клиента всякий раз, когда новые данные доступны. Клиент может выбрать, следует ли считывать данные в любой момент во время операции привязки, но моникер будет выполнять операцию привязки к завершению независимо от этого.

Кроме того, необходимо помнить, чтобы следовать правилам COM для выделения памяти при использовании асинхронных моникеров, в частности, следующих:

  • При каждом вызове COM-интерфейса или функции буфер (строка или другая) клиенту клиент отвечает за освобождение памяти путем вызова CoTaskMemFree.
  • Каждый раз, когда com-интерфейс или функция требуют буфера от своего клиента, клиент должен выделить этот буфер с помощью CoTaskMemAlloc , и вызывающий объект должен освободить его.

Обязательно следуйте этим правилам при выделении строк или буферов, передаваемых асинхронным моникерам, и не забудьте освободить память, возвращаемую асинхронными моникерами. Подробные сведения см. в статье об управлении выделением памяти и связанными разделами.

Асинхронные моникеры