2014-09-25 71 views
0

我寫的(除其他事項外)創建子進程,並傾聽他們的標準輸出從他們那裏收到通知的程序。這個進程間通信機制很好,但我正在努力解決死鎖問題。Boost.Asio:如何編寫自定義AsyncReadStream?

我想我可以使用Boost.Asio的(我已經使用了我的程序的其他部分聯網用途)和它的攝器模式的實施,使我的程序(主要是)單線程的。通過這樣做,我就不必再爲線程同步而煩惱了。

爲此,我的猜測是我必須編寫自定義的AsyncReadStream類型(它可以在一個線程中調用Windows的ReadFile()),以及asio :: async_read _ *()函數。我的問題是,我不知道如何實現AsyncReadStream概念的async_read_some()成員函數。函數接收到MutableBufferSequence引用我應該怎麼做?

是正確的做法?如果是這樣,我應該如何實現async_read_some()?或者,這可能不是正確的方法,我除了寫一個完整的定製服務之外別無選擇。通過管道

+0

爲什麼你就不能使用'ASIO:視窗:random_access_handle'等?看一看[此示例](http://www.boost.org/doc/libs/1_56_0/doc/html/boost_asio/example/cpp03/windows/transmit_file.cpp)。 – 2014-09-25 20:35:10

+0

@IgorR。用於檢索進程的stdout的匿名管道不是隨機可訪問的,所以windows :: random_access_handle不適合我的需要。我也不能使用windows :: stream_handle,因爲它不支持匿名管道(參見[here](http://www.boost.org/doc/libs/1_56_0/doc/html/boost_asio/overview/windows) /stream_handle.html))。 – floriang 2014-09-26 07:43:24

+0

我已經在Linux和Mac上使用了['stream_descriptor'](http://www.boost.org/doc/libs/1_56_0/doc/html/boost_asio/reference/posix__stream_descriptor.html),這個概念不適用於Windows? – 2014-09-26 17:42:20

回答