Forma padrão para a implementação de um fluxo em buffer que libera em um intervalo constante?

StackOverflow https://stackoverflow.com/questions/5034202

Pergunta

Eu estou simulando pacotes a partir de uma fonte que produz os pacotes em um determinado pacote/segundo de intervalo.Eu quero fazer um fluxo de classe, que opera como um ostream objeto, permitindo operator<< para ser usado para saída coisas por ela, mas com a ressalva de que cada valor inserido deve ser liberado da memória intermédia para um descritor de arquivo, em ordem, em um intervalo especificado.

Assim, por exemplo, eu poderia ter um soquete com o descritor de arquivo sockfd e dizer:

MyBuffer buffer(sockfd, 1000); //Interval of 1000 milliseconds
buffer << 1 << 2 << 3;

e o resultado poderia ser programado de tal forma que seria de saída

1
<1 second gap>
2
<1 second gap>
3

para o socket.Eu estou olhando para o Impulso.Iostreams agora, seria uma boa solução?Há alguma frase mágica que eu possa google que descreve esse problema que eu não estou ciente de?

Qualquer ajuda seria apreciada.

Obrigado Brad

Foi útil?

Solução

Uma opção para fazer isso é completamente ortogonais para a construção de uma custom fluxos de classe seria manter uma fila de cadeias de caracteres que é interrogado por um fio a cada segundo.Cada vez que a fila é inquiridos, a thread lê o primeiro elemento e envia-o em toda a rede.

Isso não utilizar os fluxos de biblioteca, mas eu acho que pode ser o que você quiser.Internamente, a maioria dos fluxos de apenas glob juntos todas as entradas que ficam em uma massa de texto, perdendo as informações sobre quais partes do texto correspondem a cada objeto inserido.

EDITAR:Eu deveria ter mencionado isso da primeira vez, mas, por favor, certifique-se de usar a sincronização apropriado na fila!Você provavelmente vai querer usar um mutex para proteger o acesso a ela, ou para usar um inteligente sistema de lock-free fila se que não funciona.Apenas certifique-se de não cegamente ler e escrever para que, a partir de vários threads.

Outras dicas

Deve o 1000ms ser assíncrona ?Se não, você poderia colocar um Sleep(1000) no seu stream do operador<<.Dependendo do que você está tentando fazer, ele poderia atender você.

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