windows - 在重定向的标准输出管道上禁用缓冲(Win32 API、C++)

标签 windows winapi redirect stdout

我正在使用 CreateProcess 从 Win32 生成一个进程,设置 STARTUPINFOhStdOutputhStdError 属性到用 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/

相关文章:

iphone - 如何检测在 iphone 上加载 UIWebView 时发生的 url 重定向?

python - Windows上的符号链接(symbolic link)?

c - 当我尚未验证 RECT 时,为什么 Drawtext 仍在绘制文本?

linux - 从 Linux 远程开发 Visual C++ 应用程序

c - 搭建学习C的环境

winapi - 在没有 WMI 的情况下获取完整的 CPU 名称

android - 无法读取 Firebase 动态链接未定义的属性 'manifest'

javascript - 我可以使用 javascript 重定向触发事件吗?

c# - 我怎样才能制作一个按钮,将剪贴板上的内容粘贴到任何位置?

c++ - 将 Objective-C 应用程序移植到 Windows。什么是最好的选择?