Russian Qt Forum

Qt => Вопросы новичков => Тема начата: rudireg от Май 09, 2020, 10:36



Название: QNetworkManager внутри QtConcurrent:map
Отправлено: rudireg от Май 09, 2020, 10:36
Привет.
Имеем класс Worker который унаследован от QObject в котором идет работа с QNetworkAccessManager
Так же есть класс Master который запускает работу  Worker через вызов QtConcurrent:map

Заметил такую ситуацию, что я не получаю ответ от QNetworkAccessManager через сигнал QNetworkReply::readyRead
Но... стоит мне внутри метода Worker  реализовать  QEventLoop
Код:
QNetworkReply *reply = this->manager->get(request);
QEventLoop loop;
loop.exec();
То ответ от  QNetworkAccessManager  получаю.

Выходит, из этой документации https://doc.qt.io/qt-5/threads-technologies.html
Только QThread способен на Thread can run an event loop

То есть внутри потока, (созданный QtConcurrent:map)  нет цикла обработки событий без моего QEventLoop и поток просто уничтожается по достижении конца метода...
Походу для моего случая лучше испольлзовать moveToThread


Название: Re: QNetworkManager внутри QtConcurrent:map
Отправлено: Авварон от Май 09, 2020, 16:06
QNAM уже использует треды внутри, нет никакой нужды его параллелить снаружи.


Название: Re: QNetworkManager внутри QtConcurrent:map
Отправлено: rudireg от Май 09, 2020, 16:14
QNAM уже использует треды внутри, нет никакой нужды его параллелить снаружи.
В моем случае есть нужда, использование QNAM это лишь верхушка айсберга. Логика подразумевает неоднократный вызов QNAM и обработка его ответа, запросы разные, и на обработку каждого ответа своя логика...


Название: Re: QNetworkManager внутри QtConcurrent:map
Отправлено: Пантер от Май 15, 2020, 20:01
QNAM по умолчанию создает 6 потоков под свои нужды. Как было сказано выше, не надо его совать еще в один поток.