Modelo de recebimento de dados e modelo de envio de dados
Um cliente de um moniker assíncrono pode escolher entre um modelo de recebimento e envio de dados para conduzir uma operação IMoniker::BindToStorage assíncrona e receber notificações assíncronas. No modelo de recebimento de dados, o cliente conduz a operação de vinculaçã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 quando solicitados, os clientes que escolhem o modelo de recebimento de dados devem 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 antes de solicitar mais dados.
Em um modelo de push de dados, o moniker conduz a operação de associação assíncrona e notifica continuamente o cliente sempre que novos dados ficam disponíveis. O cliente pode escolher se deseja ler os dados a qualquer momento durante a operação de ligação, mas o moniker levará 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 chamador 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 alocação de memória e tópicos relacionados para obter detalhes completos.
Tópicos relacionados