提升asio http客户端 - io_service.run()

时间:2011-11-16 18:23:16

标签: c++ boost boost-asio

我正在尝试弄清楚io_service.run()函数在客户端中的运行方式。这与this question有些相关,但在连接的另一端。在客户端情况下,没有接受处理程序,所以io_service.run()何时返回?

理想情况下我想运行一次(每个线程,据我所知,更正欢迎,每个调用io_service.run()的线程基本上都添加到io_service线程池中)然后发送大量请求而无需调用{ {1}},再次reset。当io_service没有工作要做时,发送的请求会有差距,但这些差距的发生在很大程度上是非确定性的,基于用户行为。

1 个答案:

答案 0 :(得分:2)

正如您所述,io_service在用完工作时会返回,例如在服务器中,接受调用为其提供工作。要防止io_service失去工作,请查看io_service::work类。

link中的SO post概述了如何使用工作对象。特别是将工作对象存储在shared_ptr中并在想要停止应用程序时重置shared_ptr等是一个有用的习惯用法。如果不调用io_service::stop()方法(也可以用来停止io_service),则可以干净地完成所有必需的工作。