Название: QWaitCondition: Destroyed while threads are still waiting Отправлено: serg_hd от Март 10, 2010, 22:27 Сабж, что это за ошибка и как её побороть? Приложение многопоточное, потоки создаются непрерывно, так же и завершаются. Но в процессе своей работы каждый из потоков "говорит" проге грузить контент в qwebview своего класса. Т.е. сам run() завершается, а работа runnable-класса (c помощью других его методов) завершается после некоторых операций с qwebview.
Вобщем ошибка вылетает в разное время, было и после 11, и 25 минуты работы проги... Есть информация (http://bugreports.qt.nokia.com/browse/QTBUG-7691), но там указано "The following problem with QNetworkAccessManager has appeared after Qt 4.6.1 update.". У меня же 4.5. Блин, ладно бы хоть прога не вылетала из-за неё(( Название: Re: QWaitCondition: Destroyed while threads are still waiting Отправлено: BRE от Март 10, 2010, 22:44 Ты бы код показал.
Как создаешь, как завершаешь, кто-что ждет? Название: Re: QWaitCondition: Destroyed while threads are still waiting Отправлено: serg_hd от Март 10, 2010, 22:53 Ты бы код показал. Если выложу весь код runnable-класса (1.5к строк) на java это многое изменит?Как создаешь, как завершаешь, кто-что ждет? Создаю что именно, поток? Создаётся он и запускается как обычно Код Никак не завершаю (java сама чистит память) и ничто ничего не ждёт. А как-то специально завершать потоки разве надо (именно со стороны qt)? Название: Re: QWaitCondition: Destroyed while threads are still waiting Отправлено: BRE от Март 10, 2010, 23:03 Если выложу весь код runnable-класса (1.5к строк) на java это многое изменит? А ты думаешь по твоему вопросу можно понять что у тебя делается в программе?Не нужен весь код класс, хотя бы куски кода с пояснениями, как и кто потоки запускает, что он делает, как он возвращает результат своей работы и как завершается. А как-то специально завершать потоки разве надо (именно со стороны qt)? Это от самого потока зависит.Название: Re: QWaitCondition: Destroyed while threads are still waiting Отправлено: serg_hd от Март 10, 2010, 23:11 А ты думаешь по твоему вопросу можно понять что у тебя делается в программе? Так я же написал в первом посте что делается. Название: Re: QWaitCondition: Destroyed while threads are still waiting Отправлено: serg_hd от Март 10, 2010, 23:13 А как-то специально завершать потоки разве надо (именно со стороны qt)? Это от самого потока зависит.Название: Re: QWaitCondition: Destroyed while threads are still waiting Отправлено: BRE от Март 10, 2010, 23:17 Т.е. сам run() завершается, а работа runnable-класса (c помощью других его методов) завершается после некоторых операций с qwebview. Ну здесь же все понятно и без слов:"... с помощью других методов .... после некоторых операций..." ::) Поэтому и попросил кода. :) Название: Re: QWaitCondition: Destroyed while threads are still waiting Отправлено: niXman от Март 11, 2010, 00:12 думаю что искать ошибку нужно с другой стороны.
access violation - это не ошибка в коде юзера(тем более, в коде на жава). другое дело, что эта ошибка "порождена" действиями юзера. но и тут не все так гладко: 1. жава сама управляет памятью. 2. программа падает через произвольное время. такие ошибки(все кто пишет на С/С++ знает) очень сложно выявить. обычно помогают всеобразные трасировщики. но опять таки, жава! лично я хз какие можно применить инструменты, для выявления таких ошибок(возникающих на системном уровне), при написании проги на жава. наверное нужно гуглить... Название: Re: QWaitCondition: Destroyed while threads are still waiting Отправлено: serg_hd от Март 11, 2010, 13:24 Эта ошибка попадается и у прогеров на питоне (http://old.nabble.com/Problem-with-QWebView-td22898481.html). Так что дело только в самом qt.
Название: Re: QWaitCondition: Destroyed while threads are still waiting Отправлено: serg_hd от Март 11, 2010, 16:52 Картина Репина "приплыли". Прога 3 месяца писалась. QT, конечно, может обрадовать в нужный момент, спору нет. Я так думаю предлагать деньги за решение проблемы тоже бессмысленно (на всякий случай - торги можем начать со 100уе ;))?
Название: Re: QWaitCondition: Destroyed while threads are still waiting Отправлено: Пантер от Март 11, 2010, 17:38 Пересмотри архитектуру, дело не в Qt.
Название: Re: QWaitCondition: Destroyed while threads are still waiting Отправлено: serg_hd от Март 11, 2010, 17:59 Пересмотри архитектуру, дело не в Qt. Текст и ссылки выше говорят о прямо противоположном.Название: Re: QWaitCondition: Destroyed while threads are still waiting Отправлено: Пантер от Март 11, 2010, 18:07 У меня эта ошибка не раз попадалась при работе с потоками, все сводилось к устранению моих ошибок.
Название: Re: QWaitCondition: Destroyed while threads are still waiting Отправлено: serg_hd от Март 11, 2010, 18:15 У меня эта ошибка не раз попадалась при работе с потоками, все сводилось к устранению моих ошибок. Почему же тогда тут (http://bugreports.qt.nokia.com/browse/QTBUG-7691?actionOrder=desc) другая ситуация?все сводилось к устранению моих ошибок Например каких? Вы работали с qwebview при этом? Если нет - то мы говорим о разных проблемах. Вам известно, например, что QNetworkAccessManager использует свои внутренние потоки, которые почему-то не завершаются перед удалением самого QNetworkAccessManager'a (это насколько я понял)? Что-то пока не представляю в каком тут месте ошибка со стороны моего кода. Название: Re: QWaitCondition: Destroyed while threads are still waiting Отправлено: serg_hd от Март 11, 2010, 19:11 И ещё заметил, что по мере работы приложения занимаемый им объём оперативной памяти постоянно растёт. На JVM выделено жёстко 256 метров максимум, значит увеличивается за счёт qt. Может что-то надо как-то подчищать? Чистить qwebview, qnetworkaccessmanager пробовал, ситуация только хуже (такая ошибка в этом случае вылезет гораздо раньше). Чистил именно тогда, когда никаких обращений к этим объектам, естественно, больше быть не могло.
Название: Re: QWaitCondition: Destroyed while threads are still waiting Отправлено: serg_hd от Март 11, 2010, 19:32 Да и собственно ошибка:
Код
Название: Re: QWaitCondition: Destroyed while threads are still waiting Отправлено: niXman от Март 11, 2010, 22:20 Цитировать EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x05320257, pid=16580, tid=6260 вот с этого и нужно было начинать! причина в этом!а - Цитировать QWaitCondition: Destroyed while threads are still waiting следствие!Название: Re: QWaitCondition: Destroyed while threads are still waiting Отправлено: muzhig от Май 27, 2010, 12:10 Мое мнение, что ошибка связана с двумя вещами:
сетевым соединением и завершением потока. У меня есть потомок QThread у которого есть член QTcpSocket. В соответствии с сигналами, сокет открывается и закрывается. В деструкторе потока я делаю принудительный дисконнект, потом жду пока дисконнектится и сделается quit(), и объект потока уничтожается. * Если я не делал коннекта ни разу, ошибки не возникает * Если я сделал коннект и уничтожаю поток- получаю ошибку при попытке disconectFromHost() в деструкторе, природу которой я пока изучаю * Если я сделал коннект и дисконнект, после чего уничтожаю поток- возникает описанная автором ошибка с QWaitCondition * Если я сделал коннект и дисконнект, после чего подожду немного, а только потом уничтожаю поток- ошибки не возникает. напрашивается вывод: ошибка с QWaitCondition связана с тем, что сокет нельзя уничтожать сразу после дисконнекта. |