Используя QNetworkAccessManager.get, как я могу решить прервать? - PullRequest
4 голосов
/ 06 февраля 2010

Я пытаюсь использовать класс QT QNetworkAccessManager для управления некоторыми загрузками в многопоточном приложении C ++ / QT.

На рабочем в потоке (редактировать: поток является отдельным по другим причинам, кроме загрузки), я хотел бы получить доступ к внешнему серверу и быть готовым к получению результатов с код:

...
m_nam = new QNetworkAccessManager(this);
QNetworkReply *reply = m_nam->get(request);
connect(m_nam, SIGNAL(finished(QNetworkReply *)), this, 
        SIGNAL(finished(QNetworkReply *)));
...

Но я мог бы решить, до окончания загрузки, что меня не интересует результат.

Итак, я бы хотел настроить способ отключения соединения от другого потока с помощью сигнала do_abort ().

Что напрашивается само собой:

connect(this, SIGNAL(do_abort()), reply, SLOT(abort()));

Но я не думаю, что это сработает, потому что abort - это не слот QNetworkReply.

Так, как я могу установить механизм, где я могу остановить эту загрузку из другого потока? Я мог бы создать подкласс QNetworkReply и дать этому классу соответствующий слот. Но я бы тоже хотел понять ситуацию.

1 Ответ

2 голосов
/ 08 февраля 2010

Вам не нужен рабочий поток для использования QNetworkAccessManager. Он асинхронный, поэтому можно использовать его из основного потока.

В QThread вы реализуете слот abortTheReply (), а внутри - m_reply-> abort () Затем вы подключаете свой сигнал do_abort () к abortTheReply ().

...