我在升壓編程新的,我一直在尋找一個理由使用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。 –