Я использую asio
(только автономный заголовок) в пределах Qt
Быстрое приложение.QTimer с asio :: io_service.poll_one() или poll()
Поскольку Qt и asio имеют свой собственный цикл событий, если я правильно понял, я использую сигнал QTimer
для вызова класса, содержащего мой объект asio::io_service
.
QTimer *timer_io = new QTimer();
QObject::connect(timer_io, SIGNAL(timeout()), &my_INandOUT, SLOT(poll_ios()));
timer_io->start(IO_TIMER);
Я установил IO_TIMER в 100 мс. Я прочитал в документации, что после каждого poll()
необходимо вызывать asio::io_service.reset()
. Таким образом, слот poll_ios()
имеет следующий код:
void INandOUT::poll_ios()
{
// qDebug() << "poll_io signal";
m_io_service.poll_one();
m_io_service.reset();
}
является то, что правильный способ вызова reset()
? Или я должен вызвать его в каждом обработчике, как только они закончат свою задачу? Это безопасно или я могу потерять asio
событий?
Первое, что я делаю с 'asio' является' async_connect', и мой обработчик никогда не возвращается если я не использую 'm_io_service.reset()'. Спасибо, я посмотрю на QNetworkAccessManager. – jmatthieu