我有一个长期运行的基于控制台的应用程序Sender
,它使用非缓冲输出(如cout << "Message" << flush()
)将简单文本发送到STDOUT。我想创建一个基于MFC对话框的应用程序(名为Receiver
),它启动Sender
并可以读取它的输出。 Receiver
也应该能够检测Sender
何时死亡,或者能够在Sender
找到Sender
。 Reciever
对Sender
一无所知,我也无法更改Sender
的代码。
我的第一次尝试是为子进程创建带有重定向STDIN和STDOUT的管道,并使用异步ReadFileEx调用来读入Receiver
的数据。这项工作无效,I've posted a separate thread关于这些具体问题。
我的问题是,在一般的架构术语中,我该怎么做?我不希望{{1}}的主循环阻止或轮询,但应该使用Wait function的某种风格。
答案 0 :(得分:2)
您有2个基本选项。你已经尝试过的选项1,从子进程读取/写入异步(也就是非阻塞)IO。选项2是在Receiver进程中创建一个单独的线程,阻止对子进程的读/写。
我建议选项2,我觉得它更容易。当然,您遇到了如何从辅助线程获取数据到主线程的问题。你需要使用锁和信号量。然而,它应该比非阻塞IO更麻烦。