我正在为参加AI 比赛的机器人实现测试服务器,机器人通过标准输入/输出与服务器通信。机器人轮到他们的时间只有这么长。在之前的 AI 竞赛中,我用Java编写了服务器,并通过使用 BlockingQueue 和线程对进程流进行阻塞读/写来处理这个问题。
对于希望使用 C++ 的本次比赛。我找到了 Boost.Process和 Boost.Asio 但据我所知,Asio 库没有办法超时等待读取的时间。它的设计是围绕使用回调函数来告诉您读取何时完成。而我想阻止但最大超时。我可以使用特定于平台的 API(例如 select)来执行此操作,但要寻找更多的跨平台解决方案。有什么建议么?
编辑:为了澄清我想要一个类 BotConnection 来处理与具有两种方法的机器人进程进行通信,例如: string readLine(long timeoutInMilliseconds) 和 void writeLine(string line, long timeoutInMilliseconds) 。因此,调用代码的编写就像使用阻塞调用一样,但可以超时(抛出异常或更改上面的方法签名,因此如果操作完成或超时,则返回成功标志)