我在升压编程新的,我一直在寻找一个理由使用io_service::work
,但我无法弄清楚;在我的一些测试中,我删除了它,工程罚款。只要有异步操作执行我为什么要使用io_service :: work?
5
A
回答
9
的io_service::run()
将运行操作。如果在任何时候没有未处理的异步操作(或正在调用处理程序),则将返回run()
调用。
但是,有些设计更希望run()
调用不会退出,直到完成所有工作,并且明确指示io_service
可以退出。这就是io_service::work
的用途。通过创建work
对象(我通常做它的堆和一个shared_ptr)函数,io_service对象认为自己总是有一些悬而未决,因此run()
方法将不会返回。一旦我希望服务能够退出(通常在关闭期间),我将销毁工作对象。
6
io_service::work
是基类,可以发布到的io_service
一个实例,例如,当您正在使用一个插座的工作,并开始异步读取所有作品,实际上添加的是work
到io_service
。所以,你通常不会使用work
直接,但有一个例外:
io_service::run
将尽快,因为没有更多的工作要做回报,所以认为有一些生产者和消费者线程的应用程序,生产者偶尔产生的作品并将其张贴到消费者线程与io_service::post
,但如果所有的作品完成了,那么io_service::run
将返回,可能你的消费者线程将被停止,所以你需要一个任意的工作,以保持io_service
忙,在这种情况下,你可以直接使用io_service::work
。
相关问题
- 1. 为什么必须调用io_service :: reset()?
- 2. 为什么我需要Iterator接口,为什么要使用它?
- 3. boost :: asio :: io_service - 为什么使用post函数?
- 4. 我为什么要用WinDbg?
- 5. 我为什么要用Drools?
- 6. 为什么我们要使用HttpContext.Current?
- 7. 为什么我们需要使用prompt.start()?
- 8. 我为什么要使用Spring Android?
- 9. 为什么我要使用静态库?
- 10. 为什么我不需要使用Adapter.notifyDataSetChanged()?
- 11. 我为什么要使用MVVM?
- 12. 我为什么要使用AWS RDS?
- 13. 我为什么要使用EMF?
- 14. 我为什么要使用glTranslate?
- 15. 我们为什么要使用NSOperationQueue?
- 16. 我为什么要使用POCO?
- 17. 为什么我们需要使用ExitWindowsEx
- 18. 为什么我需要使用Activator CreateInstance?
- 19. 我为什么要使用TRAP指令?
- 20. 为什么我要使用PHP框架
- 21. 为什么我需要使用超时?
- 22. 为什么我需要使用stopPropagation()?
- 23. 我为什么要使用DataForm?
- 24. 我为什么要使用gitignore?
- 25. 我为什么要使用java容器?
- 26. 我为什么要使用CSS3按钮?
- 27. 我为什么要使用Flex?
- 28. 我为什么要使用AsyncCallback?
- 29. 为什么emgu cv example does not work?
- 30. 为什么Disabled = ture for html work?
销毁喜欢使用复位()? – lucastamoios
通常情况下,如果我用一个shared_ptr工作,那么是的,我称之为'复位()'上的shared_ptr。 –