试图用boost :: asio :: async_read替换我的boost :: asio :: read

时间:2010-08-05 16:34:10

标签: c++ boost asynchronous boost-asio

所以,我开始使用的代码和工作代码(下面有重要的警告)

int reply_length = boost::asio::read(*m_socketptr, boost::asio::buffer((char*)reply, 6));

这是有效的,我得到了标题然后我解码并跟进另一个读取,它获取我的消息然后我循环回到顶部并读取另一个标题。这会将我的CPU固定在100%,因此我想用以下内容替换上面读取的标题:

m_socketptr->async_read_some(boost::asio::buffer(m_data, 6), boost::bind(&CSListener::handleRead, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));

boost::asio::async_read(*m_socketptr, boost::asio::buffer(m_data, 6), boost::bind(&CSListener::handleRead, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));

无论哪种方式我编码,handleRead方法都不会被调用。救命啊!?

TIA

1 个答案:

答案 0 :(得分:8)

我假设您在代码中的某处创建了io_service?您需要调用其io_service.run()io_service.run_one()才能使其正常运行。如果你需要它是异步的,那么run_one()就是你的男人;在app的/ thread的主循环中调用它。