estoy lanzando un proceso de Win32 usando CreateProcess
, el establecimiento de los hStdOutput
y hStdError
propiedades de STARTUPINFO
a la tubería maneja crea con CreatePipe
. Tengo dos hilos que leen los tubos, esperando que los datos estén disponibles (o el proceso para completar, en cuyo punto comprueba que no quedan datos antes de terminar el hilo).
A medida que los datos están disponibles, escribo el resultado de manera efectiva en un gran cuadro de texto.búfer Deshabilitar a un redirigir la salida estándar de tubo (API Win32, C++)
Lo que está sucediendo es que la salida se está almacenando en el búfer, por lo que un proceso lento simplemente genera fragmentos de datos en el cuadro de texto, pero no "como sucede".
No estoy seguro de si es la tubería que está haciendo el almacenamiento en búfer, o algo que ver con la redirección.
¿Hay alguna forma de configurar la tubería para ser sin buffer, o iniciar el proceso de tal manera que la stdout se envíe lo antes posible?
estoy probando con una aplicación de prueba que se imprime líneas intervalos de un segundo
Here is line one
(waits one second)
Here is line two
(waits one second)
... etc
¿Transmite sin problemas cuando el proceso está escribiendo en una consola? En Linux este es un problema bastante conocido, y la solución es asignar un pseudo-tty porque algunos programas activan el almacenamiento en búfer cuando el resultado no es un tty. En Windows, no es común comprobar el tipo de archivo de stdout, por lo que no esperaría que el almacenamiento en búfer fuera diferente en una tubería frente a una consola. –
Sí, cuando está en la consola (es decir, cmd.exe), se transmite como se esperaba, con los retrasos, etc. –
¿Cómo está escribiendo el proceso en la salida estándar? Creo que podría estar activando el almacenamiento en búfer de secuencias C o C++. – wilx