1

物事がどのように機能するかを誤解しているのかもしれませんが、呼び出しにタイムアウトを追加しようとしている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);
}
4

1 に答える 1

1

あなたは物事の仕組みを誤解しています。キャンセル可能にしたい場合は、次のような非同期メソッドを使用する必要があります。

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

それ以外の

boost::asio::read_until(socket_,response,asString);
于 2012-08-09T04:05:24.387 に答える