Pergunta

Se am am chamando boost :: asio :: async_write / async_read diretamente após o outro, os dados serão ordenados? Ou eu preciso esperar no retorno de chamada antes que eu estou chamando de leitura / gravação de novo?

Agradecemos antecipadamente!

Foi útil?

Solução

Os dados não são garantidos para ser encomendados e se você estiver usando essas funções você deve esperar para o retorno de chamada antes de escrever novamente.

(Discussão em termos de async_write , também se aplica a async_read )

Como async_write é implementado em termos de várias chamadas para o fluxo subjacente async_write_some função, as chamadas não são atômicas. Cada chamada tentativas para gravar dados para o fluxo e tem um retorno de chamada interna para lidar com operações parciais, com efeito espera a conclusão de que você pode codificar-se. Então, você poderia facilmente acabar com dados mistos, se você não aguardar a conclusão.

Você também precisa considerar threads. Se você chamar async_x em um múltiplo fluxo de vezes que você pode acabar com operações simultâneas no mesmo fluxo subjacente em diferentes tópicos, levando a um comportamento indefinido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top