如何从一个subprocess的STDOUT接收输出,而不会阻塞或阻止

我有一个长期运行的基于控制台的应用程序Sender ,它使用非缓冲输出(如cout << "Message" << flush()将简单文本发送到STDOUT。 我想创build一个MFC对话框的应用程序(名为Receiver )启动Sender并可以读取它的输出。 Receiver也应该能够检测到Sender已经死亡,或者如果愿意的话可以杀死Sender者。 SenderReciever一无所知,我不能改变Sender的代码。

我的第一个尝试是创buildpipe道的subprocessredirectSTDIN和STDOUT,并使用asynchronousReadFileEx调用读取Sender的数据。 这不能正常工作, 我已经发布了一个关于这些具体问题的单独的线程 。

我的问题是,我应该如何以一般的build筑术语来做这件事? 我不希望Receiver的主循环阻塞或轮询,而应该使用Wait函数的一些风味。

Solutions Collecting From Web of "如何从一个subprocess的STDOUT接收输出,而不会阻塞或阻止"

你有两个基本选项。 选项1你已经尝试过,做异步(也就是非阻塞)IO从子进程读/写。 选项2是在Receiver进程中创建一个独立的线程,阻止读/写子进程。

我建议选择2,我觉得更容易。 那么当然,你有如何从辅助线程获取数据到主线程的问题。 你需要使用锁和信号灯。 但是,它应该比没有阻塞的IO麻烦。