代码之家  ›  专栏  ›  技术社区  ›  shaz

正在尝试用boost::asio::async\u read替换我的boost::asio::read

  •  3
  • shaz  · 技术社区  · 15 年前

    因此,我开始使用的代码和有效的代码(下面有一些重要的注意事项)

    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方法都不会被调用。救命!?

    短暂性脑缺血发作

    1 回复  |  直到 15 年前
        1
  •  8
  •   Gianni    15 年前

    io_service 在你的代码里?你需要称之为 io_service.run() io_service.run_one() 让它工作。如果需要异步,那么 run_one()