2012-08-28 49 views
1

我使用boost.asio异步读取数据,如果handle_read需要很多时间(如睡眠),是否会影响其他连接?关于boost.asio异步睡眠

+0

你的问题我也不清楚,请澄清。 –

回答

2

如果在一个线程中执行io_service::run,则会按顺序调用与该io_service关联的所有I/O对象的完成处理程序。所以,如果其中一个花费太多时间,所有队列都会卡住。

为了防止出现这种情况,您可以重新设计此完成处理程序,或将具有问题处理程序的I/O对象与在独立线程中运行的其专用io_service相关联。

(请注意,在运行多线程一个io_serivce不会解决这个问题,因为你无法知道处理程序如何在线程之间分配。)

2

对于异步IO,您通常会在一个线程中执行所有操作,因此您应该尽可能缩短时间。你绝对不要想要在处理输入时睡觉。

Boost有timers让你做一个异步睡眠。