Russian Qt Forum

Qt => Работа с сетью => Тема начата: serg_hd от Май 13, 2010, 21:00



Название: QNetworkProxy и поток
Отправлено: serg_hd от Май 13, 2010, 21:00
Главным потоком создаются второстепенные.
Второстепенный поток может послать 2 сигнала главному: на создание QWebView и на удаление себя же.
Второстепенный поток работает с созданным для него в главном потоке QWebView.
Проблема в том, что если во второстепенном потоке, для QWebView использовать QNetworkProxy, а именно:
Код
C++ (Qt)
this->_webView->page()->networkAccessManager()->setProxy(
  QNetworkProxy(QNetworkProxy::HttpProxy, this->serviceProxyIp, this->serviceProxyPort)
 );
 
а потом, после работы с QWebView, слать сигнал на удаление всего потока, то через 2-3-4 мин приложение вылетает с ошибкой чтения памяти.
Без использования прокси всё нормально.
Деструктор второстепенного потока:
Код
C++ (Qt)
ThreadCore::~ThreadCore()
{
this->quit(); //в методе run() установлен exec()
this->wait();
this->_webView->deleteLater();
}
 
Удаляется второстепенный в слоте главного обычным delete.

Могут быть какие-нибудь рекомендации? Спасибо.



Название: Re: QNetworkProxy и поток
Отправлено: SimpleSunny от Май 14, 2010, 00:42
Возможно QWebView может работать только в одном потоке?
Когда-то надо было в нескольких потоках анализировать js. Запускал поток, создавал в нем QWebView и выпонял js скрипт, программа странно вылетала. Когда разделил mutex'ами доступ к QWebView, коректно работал QWebView только в одном потоке, в остальных были странности. Потом перенес все в главный и работал через один QWebView.


Название: Re: QNetworkProxy и поток
Отправлено: serg_hd от Май 14, 2010, 00:46
Возможно QWebView может работать только в одном потоке?
Когда-то надо было в нескольких потоках анализировать js. Запускал поток, создавал в нем QWebView и выпонял js скрипт, программа странно вылетала. Когда разделил mutex'ами доступ к QWebView, коректно работал QWebView только в одном потоке, в остальных были странности. Потом перенес все в главный и работал через один QWebView.

Без использования прокси всё нормально.

Специально выделил же...


Название: Re: QNetworkProxy и поток
Отправлено: ритт от Май 14, 2010, 01:31
а я подумал, что то была ссылка...

специально вот заглянул в документацию, ибо стало интересно - а что будет, если убрать этот вот this->quit() из деструктора и сделать завершение потока как-нибудь...эммм...иначе?


Название: Re: QNetworkProxy и поток
Отправлено: serg_hd от Май 14, 2010, 03:01
а я подумал, что то была ссылка...
Это чтобы в глаза слишком не бросалось  ;D. Хотя да, лучше надо было жирным.

... сделать завершение потока как-нибудь...эммм...иначе?
например?
Просто вопрос, как мне кажется, не в правильности удаления потока, а в том, что остаётся в потоке после использования прокси на момент удаления этого потока. И, собственно, как от этого избавиться. Но это, повторюсь, только так кажется :)


Название: Re: QNetworkProxy и поток
Отправлено: serg_hd от Май 14, 2010, 16:51
Может быть это возникает из-за несоответствия типов прокси? Напр. в коде указывается http, а она на самом деле https...


Название: Re: QNetworkProxy и поток
Отправлено: ритт от Май 14, 2010, 17:05
а ещё можно не гадать, а выложить минимальный проект, воспроизводящий твою проблему, а мы его палочкой потыкаем...


Название: Re: QNetworkProxy и поток
Отправлено: serg_hd от Май 14, 2010, 17:17
а ещё можно не гадать, а выложить минимальный проект, воспроизводящий твою проблему, а мы его палочкой потыкаем...
Так не получится - прокси выдаются для IP юзера оплатившего их.
Сама проблема описана максимально приближённо. Остаётся иногда в потоке что-то такое, из-за чего при удалении потока происходит ошибка чтения/записи, если использовать прокси конечно. В связи с острым недостатком времени приличное вознаграждение нашедшему выход - не вопрос.