gpt4 book ai didi

c++ - 如何在不阻塞或轮询的情况下从子进程的 STDOUT 接收输出

转载 作者:行者123 更新时间:2023-11-28 03:55:52 25 4
gpt4 key购买 nike

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

我的第一次尝试是为子进程创建带有重定向 STDIN 和 STDOUT 的管道,并使用异步 ReadFileEx 调用读入 Sender的数据。这无法正常工作,并且 I've posted a separate thread关于那些具体问题。

我的问题是,在一般的架构术语中,我应该如何做到这一点?我不要 Receiver的主循环来阻止或轮询,但应该使用一些 Wait function 的风格.

最佳答案

您有 2 个基本选项。您已经尝试过的选项 1,执行异步(又名非阻塞)IO 以从子进程读取/写入。选项 2 是在 Receiver 进程中创建一个单独的线程来阻止对子进程的读/写。

我推荐选项 2,我发现它更容易。然后,您当然会遇到如何将数据从辅助线程获取到主线程的问题。为此,您需要使用锁,也许还需要使用信号量。但是,它应该比非阻塞 IO 更麻烦。

关于c++ - 如何在不阻塞或轮询的情况下从子进程的 STDOUT 接收输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3661041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com