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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] QNetworkAccessManager и QThread не дружат  (Прочитано 9153 раз)
AlekseyK
Гость
« : Октябрь 26, 2010, 01:22 »

Знаю, что эта тема всем уже набила оскомину, но может найдутся добрые люди, которые поставят в ней точку?! Подмигивающий

В общем есть гипотетическая задача запустить QNetworkAccessManager из отдельного потока, хотя это не обязательно и в отдельном потоке можно запустить только QNetworkReply. Пример рабочего приложения прилагается, см. cadvertise.cpp и cadvertise.h. Ошибка вываливается, если закрыть программу во время загрузки страницы (см. httpFinished). Всякие трюки типа:
Код
C++ (Qt)
   abort = true;
   if(reply != 0 && reply->isRunning())
   {
       reply->abort();
       reply->close();
   }
 
   exit();
   wait(); // wait for thread finish for correct resources deallocation
не помогают. Ошибка вываливается на -
Код
C++ (Qt)
96:    delete manager;

Если подождать пока страница полностью загрузится - ошибка не возникает:
Цитировать
ASSERT failure in QCoreApplication::sendEvent: "Cannot send events to objects owned by a different thread. Current thread 3d6730. Receiver '' (of type 'QNativeSocketEngine') was created in thread b6c1968", file kernel\qcoreapplication.cpp, line 349

QWaitCondition: Destroyed while threads are still waiting

Хочется выяснить - мой ли это баг: я не дочитал документацию по Qt? Или это баг Qt - люди поместили в июле и сентябре:
http://bugreports.qt.nokia.com/browse/QTBUG-12302
http://bugreports.qt.nokia.com/browse/QTBUG-13574?page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel
Непонимающий
« Последнее редактирование: Октябрь 27, 2010, 14:39 от AlekseyK » Записан
ufna
Гость
« Ответ #1 : Октябрь 27, 2010, 12:38 »

http://www.prog.org.ru/index.php?topic=15397.msg102111#msg102111
Записан
AlekseyK
Гость
« Ответ #2 : Октябрь 27, 2010, 14:38 »

Решение здесь: http://www.prog.org.ru/index.php?topic=15397.msg102130#msg102130
Рабочий вариант программы, если кому нужно, прилагается.
« Последнее редактирование: Октябрь 27, 2010, 14:41 от AlekseyK » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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