尝试使用deadline_timer为read_until添加超时

时间:2012-08-08 15:14:41

标签: c++ boost boost-asio

也许我误解了事情是如何运作的,但我正在尝试为read_until电话添加超时,所以我创建了deadline_timer并在调用read_until之前启动了它,但是read_until仍会阻止所有内容,并且计时器永远不会被激活。我做错了吗?以下是我的代码中的一些代码段。

void MyClass::handle_timeout(const boost::system::error_code& error)
{
    // Our deadline timer went off.
    std::cout << "Deadline Timer was triggered." << std::endl;
    Disconnect();
}

// Read some data.
void MyClass::ReadData(){
            boost::asio::streambuf response;
            deadline_.expires_from_now(boost::posix_time::seconds(DEFAULT_TIMEOUT));
            deadline_.async_wait(boost::bind(&MyClass::handle_timeout, this, _1));

            boost::asio::read_until(socket_,response,asString);
}

1 个答案:

答案 0 :(得分:1)

你误解了事情的运作方式。如果您desire cancelability,,则需要使用异步方法,例如

boost::asio::async_read_until(...);

而不是

boost::asio::read_until(socket_,response,asString);