多次调用std :: cout会使子进程挂起
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多次调用std :: cout会使子进程挂起相关的知识,希望对你有一定的参考价值。
我将在此处复制上一个问题的一部分来描述问题:
我用C ++编写了一个应用程序,它有两个部分 - 前端和后端。这两个使用wxWidgets提供的IPC层进行通信。在后端,我使用一些遗留函数进行图像数据操作。其中一个函数有时会挂起或陷入某些无限循环(我可以观察到某个点之后进程使用了0%的进程资源),但只有当我将后端作为前端的子进程运行时才会发生这种情况。否则(当我手动运行时)它工作得很好。
事实证明,用std::cout
打印太多线条导致了这一点,但我想了解原因。是不是wxWidgets利用一些缓冲区来存储应用程序输出,打印只是溢出它?或者这是Windows的本机问题?或者它可能与std::cout
实施有关?
我很确定我无法用printf
重现这一点
似乎我错了 - printf
似乎也引发了这个问题
答案
stdout缓冲区的大小有限。必须读取您正在写入缓冲区的内容,无论是文件,控制台窗口还是其他进程。如果你的写入速度快于读者能够处理的速度,那么缓冲区最终将填满并阻止任何进一步的写入,直到读者读取了一些数据。
以上是关于多次调用std :: cout会使子进程挂起的主要内容,如果未能解决你的问题,请参考以下文章