2014-09-25 77 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

回答