gpt4 book ai didi

C++ 跨平台超时读取

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:55:38 25 4
gpt4 key购买 nike

我正在为参加 AI competition 比赛的机器人实现测试服务器,机器人通过标准输入/输出与服务器通信。机器人只有这么长时间才能轮到他们。在之前的 AI 竞赛中,我在 Java 中编写了服务器并通过在进程流的阻塞读/写上使用 BlockingQueue 和线程来处理这个问题。

本次比赛希望使用 C++。我找到了 Boost.Process和 Boost.Asio 但据我所知,Asio 库没有办法超时等待读取的时间。它的设计围绕使用回调函数来告诉您读取何时完成。而我想阻止但有最大超时。我可以使用特定于平台的 API(例如 select)来执行此操作,但正在寻找更多跨平台解决方案。有什么建议吗?

编辑:为了澄清,我想要一个 BotConnection 类来处理与具有两种方法的机器人进程的通信,例如:string readLine(long timeoutInMilliseconds) 和 void writeLine(string line, long timeoutInMilliseconds)。所以调用代码的编写就像使用阻塞调用一样,但可以超时(抛出异常或更改上面的方法签名,以便在操作完成或超时时返回成功标志)

最佳答案

您可以创建跟踪超时的计时器对象。一种典型的方法是创建一个带有异步处理程序的常规计时器。每次它触发时,你都会遍历你的连接对象,寻找那些没有传输任何数据的对象。在您的连接读取处理程序中,您将对象标记为已接收数据。在粗略的伪代码中:

timer_handler:
for cnx in connections:
if cnx.recv_count > 0:
cnx.recv_count = 0
cnx.idle_count = 0
continue

cnx.idle_count += 1
if cnx.idle_count > idle_limit:
cnx.close()


cnx_read_handler:
cnx.recv_count += 1

注意:我没有使用过 asio,但我确实检查过并且确实提供了计时器。

关于C++ 跨平台超时读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19805931/

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