Modelo Data-Pull e Modelo Data-Push
Um cliente de um moniker assíncrono pode escolher entre um modelo data-pull e data-push para conduzir um assíncrono IMoniker::BindToStorage operação e receber notificações assíncronas. No modelo de recebimento de dados, o cliente conduz a operação de ligação e o moniker fornece dados ao cliente somente à medida que são lidos. Em outras palavras, após a primeira chamada para IBindStatusCallback::OnDataAvailable, o moniker não fornece nenhum dado ao cliente, a menos que o cliente tenha consumido todos os dados que já estão disponíveis.
Como os dados são baixados somente conforme solicitados, os clientes que escolhem o modelo de recebimento de dados devem certificar-se de ler esses dados em tempo hábil. No caso de downloads da Internet com monikers de URL, a operação de ligação pode falhar se um cliente esperar muito tempo antes de solicitar mais dados.
No modelo de envio de dados, o moniker conduz a operação de ligação assíncrona e notifica continuamente o cliente sempre que novos dados estão disponíveis. O cliente pode escolher se deseja ler os dados a qualquer momento durante a operação de ligação, mas o moniker conduzirá a operação de ligação à conclusão independentemente disso.
Além disso, você precisa se lembrar de seguir as regras COM para alocação de memória ao usar monikers assíncronos, especificamente o seguinte:
- Sempre que uma interface COM ou chamada de função retorna um buffer (string ou outro) para seu cliente, o cliente é responsável por liberar a memória chamando CoTaskMemFree.
- Sempre que uma interface ou função COM requer um buffer de seu cliente, o cliente deve alocar esse buffer usando CoTaskMemAlloc e o destinatário deve liberá-lo.
Certifique-se de seguir essas regras ao alocar cadeias de caracteres ou buffers que são passados para monikers assíncronos e lembre-se de liberar memória retornada por monikers assíncronos. Consulte Gerenciando de alocação de memória e tópicos relacionados para obter detalhes completos.
Tópicos relacionados