Chr*_*s H 14 c++ boost boost-asio
我刚刚浏览了asio 聊天服务器示例.我的问题是他们使用这个io_service.run()功能.该io_service.run()函数的文档说:
run()函数将阻塞,直到所有工作完成,并且不再有调度程序,或者直到io_service已停止.多个线程可以调用run()函数来设置一个线程池,io_service可以从中执行处理程序.在池中等待的所有线程都是等效的,io_service可以选择其中任何一个来调用处理程序.只有在调用reset()之后才能完成run()函数的安全调用.
它表示run函数将返回,并且我假设当它确实返回时,网络线程会停止,直到它再次被调用.如果这是真的,那么为什么不在循环中调用run函数,或者至少给出自己的线程?这个io_service.run()功能对我来说几乎是一个谜.
Kor*_*icz 19
"直到所有工作完成并且没有更多的处理程序被派遣,或者直到io_service被停止"
请注意,您不要安装一个处理器,命名handle_accept,在每个执行重新安装本身.因此,io_service.run永远不会回来,至少在你手动退出之前.
基本上,当你在一个线程中运行io_service.run时,io_services proactor使用你安装的处理程序接管程序流.从那时起,您可以根据事件(例如handle_accept)而不是正常的程序程序流来处理程序.你提到的循环是在asio的主要深度的某个深处;-).
| 归档时间: |
|
| 查看次数: |
15351 次 |
| 最近记录: |