【发布时间】:2013-04-14 09:31:11
【问题描述】:
我正在使用 boost::asio::windows::stream_handle 并使用 async_read_some 方法从命名管道中递归读取数据。我为 async_read_some 方法关联了一个 read_handler。但是 async_read_some 处理程序只被调用一次,当新消息通过管道时它不会被进一步调用。通过反复试验方法,我将 read_handler 再次分配给 async_read_some 方法,现在它被正确调用了。但这是正确的做法吗,或者请提出一种从管道中获得持续响应的优雅方式。
boost::asio::io_service my_io_service;
boost::asio::windows::stream_handle pipe( my_io_service);
boost::array<char, 4096> buffer;
void CPublishSubscribeLib::read_handler(const boost::system::error_code& ec, std::size_t bytes_transferred)
{
if(bytes_transferred > 0 )
pipe.async_read_some(boost::asio::buffer(buffer, 150), boost::bind(&CPublishSubscribeLib::read_handler, this, _1, _2));
}
先谢谢了!
【问题讨论】:
-
要么
read_handler被bytes_transferred == 0调用,要么my_io_service::run退出。
标签: boost boost-asio