QNetworkAccessManager, обрабатывающий асинхронный поток - PullRequest
0 голосов
/ 25 февраля 2010

Я новичок в QT. Я создал объект класса QNetworkAccessManager главное окно в качестве родителя. Также зарегистрирован в СИГНАЛ закончен. Работает нормально. Но я хочу знать, в каком потоке он будет работать. Будет ли это блокировать основной поток. Если мне нужно выполнить последовательность операций get, как мне нужно написать код. Пожалуйста, дайте мне образец, чтобы правильно понять концепцию.

Ответы [ 2 ]

3 голосов
/ 26 февраля 2010

Это, конечно, не работает в основном потоке, вызовы get () являются асинхронными.

Например, это будет запускать запросы get:

while (condition) {
    QNetworkRequest request;
    request.setUrl(QUrl(m_ServerURL);
    m_httpGetUpdatedFile->get(request);
}

Затем у вас есть слот для готового сигнала, который обрабатывает QNetworkReply. Этот слот в основном должен вызываться для каждого запроса get, который вы делаете (даже если он терпит неудачу). Если вам нужно отслеживать, когда все ваши запросы на получение завершены, вам нужно отслеживать, сколько вы опубликовали, а затем иметь свой собственный флаг или сигнал завершения.

1 голос
/ 25 июля 2014

QNAM использует потоки в фоновом режиме, но это совершенно невидимо для кода вашего приложения. Все, что вы увидите, будет запущено в главном потоке.

QNAM работает обычным образом Qt, он будет излучать сигналы, когда что-то происходит, и вы подключаете эти сигналы к слотам в своем собственном коде, которые делают все, что могут. Если у них, например, недостаточно данных, то ваши слоты не должны блокироваться, чтобы ждать новых данных, вместо этого они должны вернуться. И тогда они будут вызываться снова, когда / если будет больше данных (или вы получите другой сигнал, если, например, соединение было разорвано).

Некоторые ссылки, если вы еще не прочитали:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...