У меня есть метод, который запускает новый std :: thread для новых подключений, чтобы я мог читать данные и делать другие вещи. Метод, который вызывает поток, запускает чтение асинхронным способом (с использованием функций ускорения), и он возвращается после вызова async_read_some
, мой вопрос:Async методы с потоками
Какой поток обрабатывает обратный вызов? Это тот же самый поток, который вызвал звонок на async_read_some
, или же этот поток умереть после того, как он вызвал его и вернулся, и теперь основной поток обрабатывает чтение?
Вот фрагмент кода:
connection::connection_thread = std::thread(&connection::read_header,
this);
connection::connection_thread.detach();
.
.
.
void connection::read_header() {
socket_.async_read_some(boost::asio::buffer(headbuf_),
strand_.wrap(
boost::bind(&connection::on_header_read, shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred)));
begin_timeout();
}
Я не уверен, что получил то, что вы имеете в виду, извините. Единственное, что я делаю с моим потоком, это то, что я создаю новый для каждого нового соединения, затем, используя недавно созданный поток, вызываю async_read_some, а затем поток возвращается; больше ничего. – Fingolfin
@AdelQodmani: Хорошо. Кроме того, для обработки асинхронных операций вам потребуется также поток для вызова 'run' или' poll' в 'io_service'; иначе они никогда не произойдут (или, по крайней мере, они никогда не закончатся). –
Я добавил связанный фрагмент кода. – Fingolfin