Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: AlekseyK от Октябрь 26, 2010, 01:22



Название: [РЕШЕНО] QNetworkAccessManager и QThread не дружат
Отправлено: 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
???


Название: Re: QNetworkAccessManager и QThread не дружат
Отправлено: ufna от Октябрь 27, 2010, 12:38
http://www.prog.org.ru/index.php?topic=15397.msg102111#msg102111


Название: [РЕШЕНО] QNetworkAccessManager и QThread не дружат
Отправлено: AlekseyK от Октябрь 27, 2010, 14:38
Решение здесь: http://www.prog.org.ru/index.php?topic=15397.msg102130#msg102130
Рабочий вариант программы, если кому нужно, прилагается.