我正在尝试弄清楚io_service.run()函数在客户端中的运行方式。这与this question有些相关,但在连接的另一端。在客户端情况下,没有接受处理程序,所以io_service.run()
何时返回?
理想情况下我想运行一次(每个线程,据我所知,更正欢迎,每个调用io_service.run()
的线程基本上都添加到io_service线程池中)然后发送大量请求而无需调用{ {1}},再次reset
。当io_service没有工作要做时,发送的请求会有差距,但这些差距的发生在很大程度上是非确定性的,基于用户行为。
答案 0 :(得分:2)
正如您所述,io_service
在用完工作时会返回,例如在服务器中,接受调用为其提供工作。要防止io_service失去工作,请查看io_service::work
类。
此link中的SO post概述了如何使用工作对象。特别是将工作对象存储在shared_ptr
中并在想要停止应用程序时重置shared_ptr
等是一个有用的习惯用法。如果不调用io_service::stop()
方法(也可以用来停止io_service
),则可以干净地完成所有必需的工作。