C++ boost asio io_服务.run()

C++ boost asio io_服务.run(),c++,boost,boost-asio,C++,Boost,Boost Asio,我只是在复习asio。我的问题是关于他们使用io\u service.run()函数的情况。io\u service.run()函数的文档说明: run()函数会一直阻塞,直到所有工作都完成并且没有问题为止 要分派更多的处理程序,或直到io_服务已完成 停止。多个线程可以调用run()函数来设置 io_服务可以从中执行处理程序的线程池。全部的 在池中等待的线程是等效的,io_服务 可以选择其中任何一个来调用处理程序。run()函数 只有在调用之后,才能在完成后安全地再次调用 重置() 它说run

我只是在复习asio。我的问题是关于他们使用
io\u service.run()
函数的情况。
io\u service.run()
函数的文档说明:

run()函数会一直阻塞,直到所有工作都完成并且没有问题为止 要分派更多的处理程序,或直到io_服务已完成 停止。多个线程可以调用run()函数来设置 io_服务可以从中执行处理程序的线程池。全部的 在池中等待的线程是等效的,io_服务 可以选择其中任何一个来调用处理程序。run()函数 只有在调用之后,才能在完成后安全地再次调用 重置()

它说run函数将返回,我假设当它返回时,网络线程停止,直到再次调用它。如果这是真的,那么为什么不在循环中调用run函数,或者至少给定它自己的线程?
io\u service.run()
函数对我来说是个谜

“直到所有工作完成并且没有更多的处理程序要调度,或者直到io_服务停止”

请注意,您确实安装了一个名为
handle\u accept
的处理程序,它会在每次执行时重新安装自身。因此,
io_service.run
将永远不会返回,至少在您手动退出之前不会返回


基本上,在线程中运行io_service.run时,io_services proactor使用您安装的处理程序接管程序流。从那时起,您将基于事件(如
handle\u accept
)而不是正常的程序流程来处理程序。你提到的循环是在asio的proactor的可怕深处的某处;-)

老问题,希望我能在这里得到答复,因为这似乎是相关的。没有接受处理程序的客户端情况如何?我正试图用asio编写一个客户机,但我对io_服务.run()的适用性感到困惑。@Endophage,很抱歉,我已经很久没有使用boost::asio了,因此我无法从头脑中找到答案,请尝试重新问这个问题。请在此处检查答案: