首先:我想用我的外部阅读和处理游戏控制台的输出,所以我将能够为游戏服务器编写一些新功能。
我的问题是,我通过批处理管道以这种方式将Source
的输出重定向到Mod
:
.\Source.exe | Mod.exe
Mod.exe (现在进行测试):
#include <iostream>
#include <windows.h>
int main() {
std::string line;
while(std::getline(std::cin, line, '\n')) {
std::cout << line << std::endl;
Sleep(1000);
^^^^^^^^^^^^
}
return 0;
}
并且管道似乎不是异步。
我的意思是在Mod
没有完成从STDIN写入的行之前,我无法连接到服务器。如果我在等待Mod
刷新其内容后连接到服务器,我可以让服务器滞后于写很多东西来聊天(使Source
控制台充满数据)
Source
止损,如果管道中有太多数据未由Mod
我在这里找到了这个:Why does delayed expansion fail when inside a piped block of code?
异步不是完整的事实
我说两个线程都是异步的,通常这是真的。 但实际上左线程可以在管道数据时自行锁定 没有被正确的线程消耗。似乎有~1000的限制 &#34;管道中的字符&#34;缓冲区,然后线程被阻塞,直到 数据被消耗。
这是一个问题,因为Mod
以后可能会有缓慢的可执行内容,并且可能导致Source
不可用/滞后。 (这就是我延迟测试的原因)
还有其他方法可以让Source
不等待Mod
获取所有内容吗? (我使用C ++作为mod)