【发布时间】:2014-09-25 15:48:21
【问题描述】:
我编写了一个程序,它(除其他外)创建子进程并通过监听它们的标准输出来接收来自它们的通知。这种进程间通信机制很好,但我正在努力解决死锁。
我认为我可以使用 Boost.Asio(我已经在程序的其他部分中将其用于网络目的)及其 Proactor Pattern 实现来使我的程序(主要)是单线程的。这样一来,我就不必再为线程同步而烦恼了。
为此,我的猜测是我必须编写一个自定义的AsyncReadStream 类型(它将在线程中调用 Windows 的 ReadFile()),我可以将其与 asio::async_read_*() 函数一起使用。我的问题是我不知道如何实现 AsyncReadStream 概念的 async_read_some() 成员函数。我应该如何处理函数接收到的 MutableBufferSequence 引用?
这是正确的方法吗?如果是这样,我应该如何实现 async_read_some()?或者这可能不是正确的方法,我除了编写一个完整的自定义服务别无选择?
【问题讨论】:
-
为什么不能只使用
asio::windows::random_access_handle等?看看this example。 -
@IgorR。用于检索进程标准输出的匿名管道不可随机访问,因此 windows::random_access_handle 不适合我的需要。我也不能使用 windows::stream_handle,因为它不支持匿名管道(参见 here)。
-
我在 Linux 和 Mac 上用
stream_descriptor完成了这个,这个概念在 Windows 上不起作用吗? -
@SamMiller:因为它位于 posix 命名空间中,我想它不是,不幸的是。
-
我知道这已经很老了,但我设法创建了一个自定义 AsyncReadStream。你可以在这里查看github.com/raldone01/CustomAsioAsyncStreams。
标签: c++ windows boost boost-asio