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

问题描述 投票:0回答:1

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

我用C ++编写了一个应用程序,它有两个部分 - 前端和后端。这两个使用wxWidgets提供的IPC层进行通信。在后端,我使用一些遗留函数进行图像数据操作。其中一个函数有时会挂起或陷入某些无限循环(我可以观察到某个点之后进程使用了​​0%的进程资源),但只有当我将后端作为前端的子进程运行时才会发生这种情况。否则(当我手动运行时)它工作得很好。

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

c++ windows subprocess wxwidgets
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.