Forma estándar de implementar un tampón de flujo que se vuelca en un intervalo constante?

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

Pregunta

Estoy simulando los paquetes de una fuente que produce los paquetes en un determinado paquetes/segundo intervalo.Quiero hacer una secuencia de clase que funciona como un ostream objeto, lo que permite operator<< para ser utilizado para la salida de las cosas a través de él, pero con la salvedad de que cada valor insertado debe ser lanzado desde el buffer a un descriptor de archivo, en fin, en un intervalo especificado.

Así, por ejemplo, podría tener un socket con el descriptor de archivo sockfd y decir:

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

y el resultado sería cronometrados que sería la salida de

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

a la toma de corriente.Estoy buscando en el Impulso.Iostreams ahora, sería una buena solución?Hay una frase mágica que puedo google que describe este problema que no soy consciente?

Cualquier ayuda se agradece.

Gracias Brad

¿Fue útil?

Solución

Una opción para hacer esto que es completamente ortogonal a la construcción de una secuencia personalizada de la clase sería mantener una cola de las cadenas que los encuestados por un hilo a cada segundo.Cada vez que la cola es encuestados, el hilo se lee el primer elemento y se envía a través de la red.

Esto no utilizar las corrientes de la biblioteca, pero creo que podría ser lo que usted desea.Internamente, la mayoría de las corrientes sólo glob juntos todas las entradas se encuentran en una masa de texto, perdiendo la información acerca de qué partes del texto que corresponden a cada objeto que se inserta.

EDITAR:Yo debería haber mencionado esto la primera vez, pero por favor, asegúrese de usar la sincronización apropiada en esta cola!Usted probablemente quiera usar un mutex para proteger el acceso a, o uso de un ingenioso cierre libre de la cola en caso de que no funcione.Sólo asegúrese de no ciegamente a leer y escribir a partir de múltiples hilos.

Otros consejos

Si el 1000ms ser asíncrona ?Si no, usted podría poner un Sleep(1000) en su torrente del operador<<.Dependiendo de lo que usted está tratando de hacer, que podrían adaptarse a usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top