我目前第一次尝试使用 boost::asio 进行一些简单的 tcp 网络,我已经遇到了一些我不太确定如何处理的事情。据我了解 io_service.run() 方法基本上是一个循环,它运行直到没有什么可做的,这意味着它将运行直到我释放我的小服务器对象。由于我已经设置了某种主循环,为了简单起见,我宁愿从那里手动更新网络循环,而且我认为 io_service.poll() 会做我想要的事情,有点像这样:
void myApplication::update()
{
myIoService.poll();
//do other stuff
}
这似乎可行,但我仍然想知道这种方法是否有缺点,因为这似乎不是处理 boost::asios io 服务的常用方法。这是一种有效的方法还是我应该在非阻塞额外线程中使用 io_service.run() ?
Using io_service::poll
代替io_service::run
是完全可以接受的。差异的解释见文档
也可以使用 poll() 函数
派遣准备好的处理程序,但是
没有阻塞。
注意io_service::run
如果有的话会阻止work留在队列中
工作类用于通知
io_service 工作开始时
完成。这确保了
io_service 对象的 run() 函数
工作正在进行时不会退出,
并且当没有时它确实退出
剩余未完成的工作。
whereas io_service::poll
不表现出这种行为,它只是调用准备好的处理程序。另请注意,您需要调用io_service::重置在任何后续调用io_service:run
or io_service::poll
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)