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

sha*_*haz 3 c++ boost asynchronous boost-asio

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

int reply_length = boost::asio::read(*m_socketptr, boost::asio::buffer((char*)reply, 6));
Run Code Online (Sandbox Code Playgroud)

这工作,我得到标题,然后我解码并跟进另一个读取,让我得到我的消息,然后我循环回到顶部,并阅读另一个标题.这将我的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));
Run Code Online (Sandbox Code Playgroud)

要么

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));
Run Code Online (Sandbox Code Playgroud)

无论哪种方式我编码它,handleRead方法永远不会被调用.救命!?

TIA

Gia*_*nni 8

我假设你io_service在代码中创建了某个地方?你需要调用它io_service.run()io_service.run_one()使其工作.如果你需要它是异步的,那么run_one()你是男人; 在app的/ thread的主循环中调用它.