【发布时间】:2013-03-24 20:22:23
【问题描述】:
我已通读 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);
}
我有以下要求:
- 我不能因为没有积极收听而丢失数据。 IE 我不想丢包,因为在服务器发送数据包时我在 do_stuff2() 而不是 check_for_new_received_udp_data() 中。
- 我不能让 check_for_new_received_udp_data() 块超过大约 2 毫秒,因为主 for 循环需要以 60Hz 执行。
- 服务器将在其他地方运行,并且有一个完全不稳定的计划。有时会没有数据,有时我可能会重复收到相同的数据包。
我使用过异步 UDP,但这需要调用 io_service.run(),它会无限期阻塞,所以这对我没有帮助。
我曾考虑过让阻塞套接字读取超时,但似乎你必须作弊并退出 boost 调用才能做到这一点,所以这是行不通的。
答案会涉及线程吗?无论哪种方式,有人可以指出一个有点相似的例子吗?这肯定以前做过。
【问题讨论】:
-
+1 不错的第一个问题,欢迎来到 SO
-
长期潜伏者,第一次发帖。接下来我将不得不做 reddit :)
标签: sockets boost asynchronous udp boost-asio