批量管道阻止源

时间:2014-05-26 21:03:18

标签: c++ multithreading batch-file pipe

首先:我想用我的外部阅读和处理游戏控制台的输出,所以我将能够为游戏服务器编写一些新功能。

我的问题是,我通过批处理管道以这种方式将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)

0 个答案:

没有答案