我有一個boost::thread
執行同步讀取一個boost::asio::serial_port
。當我銷燬包含兩者的類的實例時,我希望線程能夠優雅地結束,即使它在讀取調用中被阻塞。我怎樣才能做到這一點?阻止同步閱讀的boost :: ASIO :: serial_port
看着docs,我試過cancel
,但它只適用於異步讀/寫。然後我嘗試了close
,但是我得到了一個異常,它不是您可以從中恢復的那種。也許使用send_break
或native_handle
? (這是Windows和便攜性不是關鍵)
更新:我也試圖stop
的io_service
我傳遞給串口對象的構造,但read
不暢通。
編輯:唯一的例外是實際上是「開捕」,但我討厭把一個try/catch塊析構函數裏面,重構代碼來執行關機過程外的析構函數會引發很多的變化上層。所以如果一些Boost權威人士說沒有別的辦法,我只會選擇這個解決方案。
下降,這就是爲什麼的boost ::短耳不叫的boost :: SioAndAsio :) – 2012-02-09 14:14:05
你的意思是提高:: ASIO :: serial_port並不意味着要讀取或寫入同步?爲了避免輪詢,我進行了同步讀/寫操作......如果他們允許我以這種方式進行讀寫操作,這種方法奇妙並且不會浪費CPU週期,它們應該提供一種優雅地結束的方式。 – 2012-02-09 14:37:35
是的,我想在幾天前做同樣的事情。 – 2012-02-09 14:47:00