- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经进行了大量搜索,但似乎仍无法弄清楚如何解决我的问题。我正在编写一个 GUI 程序(在 WinAPI 中,所以请不要使用 MFC)来与另一个程序(基于命令行)进行通信。我正在使用匿名管道,因为一切都是本地的(但也许命名管道会更好?)然后我使用 CreateProcess();运行我试图从中获取输出的程序。
现在,几个小时前我刚刚从同步切换到异步,遇到了一些问题(尽管同步并没有按照我的要求进行)。第一个问题是我仍然遇到运行同步 i/o 时遇到的相同问题;如果我多次运行我的“读”(或“写”)函数,程序就会卡住。我不能这样做,因为该程序的目的是定期向 GUI 更新命令提示符的输出。
第二个问题,最终更严重的是我的异步 i/o 的新问题;它不像我的同步那样读取整个输出。它会一直读取,直到我正在读取的程序发送返回字符(否则它恰好停止读取只是巧合)。我觉得我可能没有完全理解 OVERLAP 的功能,但我现在阅读了这么多 MSDN 后感觉陷入了困境,所以我可能忽略了它的一些重要方面。
基本上,下面的代码是我所做工作的最低限度。我曾尝试使用各种 for() 和 while() 循环技术来尝试获取所有输出数据,但似乎行不通。请注意,BUFSIZE 定义在 0x1000,这实际上比我为此需要编写的小测试程序还要多。
::ReadFile(_hChild_Out_Rd, chBuf, BUFSIZE, &dwRead, &o1);
chBuf[dwRead] = '\0';
::SetDlgItemTextA(global,IDO_WORLDOUT,chBuf);
那么有人有什么想法吗?
非常感谢您的帮助!
问候,
丹尼斯 M.
最佳答案
这看起来像是同步代码。对于异步 (OVERLAPPED) I/O,您不能在操作完成之前使用缓冲区。设置 OVERLAPPED
结构的 hEvent
成员,并将主循环从 PeekMessage
更改为 MsgWaitForMultipleObjects
以便您的程序可以响应 I/O 事件。然后您可以等待 OVERLAPPED
操作句柄和进程句柄,这样您就可以知道其他程序何时退出。
关于c++ - 帮助异步 I/O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3221327/
我是一名优秀的程序员,十分优秀!