Russian Qt Forum
Сентябрь 30, 2024, 12:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QNetworkProxy и поток  (Прочитано 4359 раз)
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« : Май 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.

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

« Последнее редактирование: Май 13, 2010, 23:33 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
SimpleSunny
Гость
« Ответ #1 : Май 14, 2010, 00:42 »

Возможно QWebView может работать только в одном потоке?
Когда-то надо было в нескольких потоках анализировать js. Запускал поток, создавал в нем QWebView и выпонял js скрипт, программа странно вылетала. Когда разделил mutex'ами доступ к QWebView, коректно работал QWebView только в одном потоке, в остальных были странности. Потом перенес все в главный и работал через один QWebView.
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #2 : Май 14, 2010, 00:46 »

Возможно QWebView может работать только в одном потоке?
Когда-то надо было в нескольких потоках анализировать js. Запускал поток, создавал в нем QWebView и выпонял js скрипт, программа странно вылетала. Когда разделил mutex'ами доступ к QWebView, коректно работал QWebView только в одном потоке, в остальных были странности. Потом перенес все в главный и работал через один QWebView.

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

Специально выделил же...
« Последнее редактирование: Май 14, 2010, 00:58 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
ритт
Гость
« Ответ #3 : Май 14, 2010, 01:31 »

а я подумал, что то была ссылка...

специально вот заглянул в документацию, ибо стало интересно - а что будет, если убрать этот вот this->quit() из деструктора и сделать завершение потока как-нибудь...эммм...иначе?
« Последнее редактирование: Май 14, 2010, 01:37 от Константин » Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #4 : Май 14, 2010, 03:01 »

а я подумал, что то была ссылка...
Это чтобы в глаза слишком не бросалось  Смеющийся. Хотя да, лучше надо было жирным.

... сделать завершение потока как-нибудь...эммм...иначе?
например?
Просто вопрос, как мне кажется, не в правильности удаления потока, а в том, что остаётся в потоке после использования прокси на момент удаления этого потока. И, собственно, как от этого избавиться. Но это, повторюсь, только так кажется Улыбающийся
« Последнее редактирование: Май 14, 2010, 03:05 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #5 : Май 14, 2010, 16:51 »

Может быть это возникает из-за несоответствия типов прокси? Напр. в коде указывается http, а она на самом деле https...
Записан

kubuntu/Win7/x64/NetBeans
ритт
Гость
« Ответ #6 : Май 14, 2010, 17:05 »

а ещё можно не гадать, а выложить минимальный проект, воспроизводящий твою проблему, а мы его палочкой потыкаем...
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #7 : Май 14, 2010, 17:17 »

а ещё можно не гадать, а выложить минимальный проект, воспроизводящий твою проблему, а мы его палочкой потыкаем...
Так не получится - прокси выдаются для IP юзера оплатившего их.
Сама проблема описана максимально приближённо. Остаётся иногда в потоке что-то такое, из-за чего при удалении потока происходит ошибка чтения/записи, если использовать прокси конечно. В связи с острым недостатком времени приличное вознаграждение нашедшему выход - не вопрос.
« Последнее редактирование: Май 15, 2010, 00:08 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.083 секунд. Запросов: 20.