多次调用std :: cout会使子进程挂起

时间:2018-03-01 15:18:34

标签: c++ windows subprocess wxwidgets

我将复制上一个问题的一部分来描述问题:

  

我用C ++编写了一个应用程序,它有两个部分 - 前端和   后端。这两个使用提供的IPC层进行通信   wxWidgets的。在后端,我使用一些传统函数来处理图像数据   操纵。其中一个功能挂起或落入一些无限的功能   有时循环(我可以观察到0%的过程资源是   经过某些过程后使用的过程),但只有在我跑的时候才会发生这种情况   后端作为前端的子进程。否则(当我运行它时   手动)它工作正常。

事实证明,使用std::cout打印太多行会导致这种情况,但我想了解原因。是不是wxWidgets利用一些缓冲区来存储应用程序输出,打印只是溢出它?或者这是Windows的本机问题?或者它可能与std::cout实施有关? 我很确定我无法用printf 重现这一点似乎我错了 - printf似乎也触发了这个问题

1 个答案:

答案 0 :(得分:1)

stdout缓冲区的大小有限。必须读取您正在写入缓冲区的内容,无论是文件,控制台窗口还是其他进程。如果你写得比阅读器能够处理的速度快,那么缓冲区最终将填满并阻止任何进一步的写入,直到读者读取了一些数据。