我正在使用 CreateProcess
从 Win32 生成一个进程,设置 STARTUPINFO
的 hStdOutput
和 hStdError
属性到用 CreatePipe
创建的管道句柄。我有两个线程读取管道,等待数据可用(或进程完成,此时它会检查在终止线程之前是否没有剩余数据)。
当数据可用时,我将输出写到一个有效的大文本框。
正在发生的事情是输出被缓冲,所以一个运行缓慢的进程只会将数据 block 扔到文本框中,而不是“当它发生时”。
我不确定是管道在做缓冲,还是与重定向有关。
有没有办法将管道设置为无缓冲,或者以尽快发送标准输出的方式启动进程?
我正在使用一个间隔一秒打印行的测试应用程序进行测试
Here is line one
(waits one second)
Here is line two
(waits one second)
... etc
最佳答案
缓冲可能在 C 运行时(printf 等)中,您对此无能为力(IIRC 它执行 isatty() 检查以确定缓冲策略)
关于windows - 在重定向的标准输出管道上禁用缓冲(Win32 API、C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3385427/