我有一個線程池boost::asio::io_service
從配方像this。我想知道如何中斷向它發佈的任務(而不是殺死線程),以便它們將被池中的下一個任務所取代?如何在boost :: asio線程池中創建任務可取消/可中斷?
0
A
回答
1
boost :: asio中的回調通常應該是相當快的。他們應該做一些工作,安排另一個工作並完成。這將是任務鬆動CPU和其他任務將被執行的要點。
有boost::thread::interrupt()
和boost::thread_group::interrupt_all()
,但他們只能在斷點停止執行線程。中斷將被視爲例外boost::thread_interrupted
。這意味着,你必須以某種方式處理異常 - 在你的情況下 - 釋放當前的任務。它比其他處理和調度處理程序的一個步驟要複雜得多。
此外,您可以在執行您自己的例程的線程中使用interrupt()
和interrupt_all()
,但運行io_service::run()
的線程並非如此。可以想象,boost::thread_interrupted
正在被run()
方法拋出,而不是異步處理程序,它可能以意外行爲結束。
相關問題
- 1. boost :: asio,線程池和線程監視
- 2. 使用boost :: asio線程池進行通用任務
- 3. boost :: asio線程池vs io_service_per_cpu設計
- 4. C++ Boost :: ASIO線程池問題
- 5. 如何在C++中使用boost來創建線程池?
- 6. 在boost線程中運行boost asio io_service
- 7. 如何在Kotlin中創建線程池
- 8. 如何在nodejs中創建線程池?
- 9. ASIO提升:不同的線程池不同的任務
- 10. 在linux下使用boost :: thread創建boost :: asio工作線程
- 11. 你可以選擇線程池中的線程來執行(boost)
- 12. 如何使用boost :: asio從網絡中斷中恢復如何使用boost :: asio
- 13. boost :: asio中動態線程池的示例
- 14. 使用線程池進行仿真:boost-thread和boost-asio
- 15. 中斷boost :: asio同步讀取?
- 16. 如何創建線程池?
- 17. 如何判斷java中的線程池中是否有可用的線程
- 18. 如何創建可取消任務循環?
- 19. boost線程池
- 20. 在線程池中組織任務
- 21. 線程池中線程的可用性?
- 22. Java的線程池和可運行在創建可運行
- 23. Boost線程取消
- 24. C#中的線程處理。可中斷的任務
- 25. 在任務中創建一個線程
- 26. Python asyncio:可中斷任務
- 27. 從另一個線程中斷boost :: asio :: async_receive_from
- 28. 如何獲取是否有任何數據可用套接字讀取boost :: asio?
- 29. 使用Boost線程和io_service創建線程池
- 30. boost :: asio在線程中啓動不同的服務?