http://www.boost.org/doc/libs/1_44_0/doc/html/boost_asio/example/timeouts/async_tcp_client.cppでasioの例を見ています
これが私が理解するのに本当に苦労していることです:
- handle_readがstart_readを再度コールバックするのはなぜですか?
- タイマーが切れるとどうなりますか?タイマーにコールバックルーチンが提供されていません。
void start_read()
{//読み取り操作の期限を設定します。deadline_.expires_from_now(boost :: posix_time :: seconds(30));// Start an asynchronous operation to read a newline-delimited message. boost::asio::async_read_until(socket_, input_buffer_, '\n', boost::bind(&client::handle_read, this, _1));
}
void handle_read(const boost :: system :: error_code&ec)
{if(stopped_)return;if (!ec) { // Extract the newline-delimited message from the buffer. std::string line; std::istream is(&input_buffer_); std::getline(is, line); // Empty messages are heartbeats and so ignored. if (!line.empty()) { std::cout << "Received: " << line << "\n"; } start_read(); } else { std::cout << "Error on receive: " << ec.message() << "\n"; stop(); }
}