在重定向的stdout管道上禁用缓冲(Win32 API,C++)

Dav*_*one 14 windows winapi redirect stdout

我正在使用Win32生成一个进程CreateProcess,设置hStdOutput和创建的管道句柄的hStdError属性.我有两个线程读取管道,等待数据可用(或完成的过程,此时它检查在终止线程之前没有剩余数据). 随着数据变得可用,我将输出写入有效的大文本框.STARTUPINFOCreatePipe

正在发生的事情是输出被缓冲,因此缓慢运行的进程只会在文本框中抛出大量数据,但不会"发生".

我不确定它是否正在进行缓冲管道,或者与重定向有关.

有没有办法将管道设置为无缓冲,或者以尽快发送stdout的方式启动进程?

我正在使用一个测试应用程序进行测试

Here is line one
(waits one second)
Here is line two
(waits one second)
... etc
Run Code Online (Sandbox Code Playgroud)

And*_*ers 3

缓冲可能在 C 运行时(printf 等)中,您对此无能为力(IIRC 它会执行 isatty() 检查以确定缓冲策略)