mok*_*oka 32 c++ networking tcp boost-asio
我目前正在尝试首次使用boost :: asio进行一些简单的tcp网络,而且我已经发现了一些我不确定如何处理的东西.据我所知,io_service.run()方法基本上是一个循环,它运行直到没有其他事情要做,这意味着它将一直运行,直到我释放我的小服务器对象.由于我已经设置了某种主循环,我宁愿从那里手动更新网络循环只是为了简单起见,我认为io_service.poll()会做我想要的,有点像这样:
void myApplication::update()
{
myIoService.poll();
//do other stuff
}
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但我仍然想知道这种方法是否有缺点,因为这似乎不是处理boost :: asios io服务的常用方法.这是一种有效的方法还是我应该在非阻塞的额外线程中使用io_service.run()?
Sam*_*ler 41
使用io_service::poll而不是io_service::run完全可以接受.文档中解释了不同之处
poll()函数也可用于调度就绪处理程序,但不会阻塞.
请注意,io_service::run如果work队列中有任何剩余,将阻止
工作类用于在工作开始和结束时通知io_service.这可以确保io_service对象的run()函数在工作正在进行时不会退出,并且在没有剩余未完成的工作时它会退出.
虽然io_service::poll没有表现出这种行为,但它只是调用现成的处理程序.另请注意,您需要在任何后续调用或调用io_service :: reset时调用.io_service:runio_service::poll
| 归档时间: |
|
| 查看次数: |
25273 次 |
| 最近记录: |