luc*_*ios 6 c++ boost boost-asio
我是升压编程的新手,我一直在寻找使用它的理由io_service::work,但我无法弄明白; 在我的一些测试中,我删除它并正常工作.
Dav*_*e S 10
io_service::run()只要有要执行的异步操作,它就会运行操作.如果在任何时候没有异步操作挂起(或调用处理程序),则run()调用将返回.
但是,有些设计更倾向于在run()所有工作完成之前调用不会退出并且io_service已明确指示可以退出.这io_service::work是用于.通过创建work对象(我通常在堆上执行它和shared_ptr),io_service认为自己总是有待处理的东西,因此该run()方法不会返回.一旦我希望服务能够退出(通常在关机期间),我将销毁工作对象.
io_service::work是基类,可以发布到的一个实例的所有作品io_service,例如,当您正在使用一个插座的工作,并开始异步读取,实际上您要添加work的io_service.所以你通常不会work直接使用,但有一个例外:
io_service::run一旦没有更多的工作要做就会返回,所以考虑一个有一些生产者和消费者线程的应用程序,生产者偶尔会生产作品并将它们发布到消费者线程中io_service::post,但是如果所有工作都完成了,那么io_service::run将返回并可能是你的消费者线程将被停止,因此您需要任意工作以保持io_service忙碌,在这种情况下您可以io_service::work直接使用.