正在瀏覽asio功能use_future,閱讀source code。asio :: use_future和事件循環
但無法弄清楚它是如何工作的。說,如果我打電話
auto fut = async_write(sock, buffer, use_future)
fut
變得std::future
(根據源代碼)。現在,如果我打電話fut.get()
我應該能夠等待異步操作完成並獲得返回值。在use_future.hpp
文件中,我看到asio async_result
處理程序分辨率等標準。
但是,如果我阻止future::get()
調用,IO循環如何繼續工作,以便操作可以完成?它是否創建一個系統線程?
這更有意義。但是如果在處理程序中使用'use_future',那麼'io_service :: run'調用了什麼呢?這將再次陷入僵局。看起來這個功能並不像我看起來那麼安全=( – PSIAlt
@PSIAlt)在處理程序中無限期阻塞的調用函數很少安全。當我使用'use_future'時,我只在沒有處理I/O服務的線程中使用它,並且這些線程啓動的所有異步操作都使用'use_future'。這種方法沒有用戶處理程序,可以在其中調用阻塞調用 –
,但這也意味着您應該使用每個連接的線程來使此模式有效。我會更好地堅持yield_context,它似乎更容易擴展。 – PSIAlt