我已经阅读了boost:asio文档(其中没有提到异步客户端),并在这里查找,但似乎在树林中迷失了方向。
我有一个仿真程序,主循环如下:
我有一个仿真程序,主循环如下:
for(;;)
{
a = do_stuff1();
do_stuff2(a);
}
很容易。
我想做的是修改它,使我拥有:
for(;;)
{
a = do_stuff1();
check_for_new_received_udp_data(&b);
modify_a_with_data_from_b(a,b);
do_stuff2(a);
}
以下是我的要求:
- 我不能因为没有主动监听而丢失数据。即使当服务器发送数据包时,我正在执行do_stuff2(),而不是check_for_new_received_udp_data(),我也不想丢失数据包。
- 由于主循环需要以60Hz执行,所以不能让check_for_new_received_udp_data()阻塞超过约2ms。
- 服务器将在其他地方运行,并且具有完全不规则的时间表。有时不会有数据,有时我可能会不断收到相同的数据包。
我已经尝试过异步UDP,但那需要调用io_service.run(),这会无限期地阻塞,所以这对我没有帮助。
我考虑过使用超时的阻塞套接字读取,但似乎必须欺骗并退出boost调用才能实现,所以这不是一个可行的方法。
答案是否涉及线程?无论如何,是否有人可以友好地为我指出一个类似的例子?肯定有人做过类似的事情。