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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QWaitCondition: Destroyed while threads are still waiting  (Прочитано 15635 раз)
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« : Март 10, 2010, 22:27 »

Сабж, что это за ошибка и как её побороть? Приложение многопоточное, потоки создаются непрерывно, так же и завершаются. Но в процессе своей работы каждый из потоков "говорит" проге грузить контент в qwebview своего класса. Т.е. сам run() завершается, а работа runnable-класса (c помощью других его методов) завершается после некоторых операций с qwebview.
Вобщем ошибка вылетает в разное время, было и после 11, и 25 минуты работы проги...
Есть информация, но там указано "The following problem with QNetworkAccessManager has appeared after Qt 4.6.1 update.". У меня же 4.5. Блин, ладно бы хоть прога не вылетала из-за неё((
« Последнее редактирование: Март 10, 2010, 22:31 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
BRE
Гость
« Ответ #1 : Март 10, 2010, 22:44 »

Ты бы код показал.
Как создаешь, как завершаешь, кто-что ждет?
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #2 : Март 10, 2010, 22:53 »

Ты бы код показал.
Как создаешь, как завершаешь, кто-что ждет?
Если выложу весь код runnable-класса (1.5к строк) на java это многое изменит?
Создаю что именно, поток? Создаётся он и запускается как обычно
Код
Java
ThreadCore core = new thread_engine.ThreadCore(this, hMap);
QThread thread = new QThread(core);
thread.setDaemon(true);
thread.start();
 
Никак не завершаю (java сама чистит память) и ничто ничего не ждёт. А как-то специально завершать потоки разве надо (именно со стороны qt)?
« Последнее редактирование: Март 11, 2010, 17:10 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
BRE
Гость
« Ответ #3 : Март 10, 2010, 23:03 »

Если выложу весь код runnable-класса (1.5к строк) на java это многое изменит?
А ты думаешь по твоему вопросу можно понять что у тебя делается в программе?
Не нужен весь код класс, хотя бы куски кода с пояснениями, как и кто потоки запускает, что он делает, как он возвращает результат своей работы и как завершается.

А как-то специально завершать потоки разве надо (именно со стороны qt)?
Это от самого потока зависит.
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #4 : Март 10, 2010, 23:11 »

А ты думаешь по твоему вопросу можно понять что у тебя делается в программе?
Так я же написал в первом посте что делается.
Записан

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

Сообщений: 668



Просмотр профиля
« Ответ #5 : Март 10, 2010, 23:13 »

А как-то специально завершать потоки разве надо (именно со стороны qt)?
Это от самого потока зависит.
к моменту завершения работы runnable-класса с qwebview сам поток этого класса мёртв, т.к. в его задачу входит только расчёт определённых параметров, которые будут браться как аргументы сигнала на создание qwebview, вряд ли надо что-то завершать...
« Последнее редактирование: Март 10, 2010, 23:16 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
BRE
Гость
« Ответ #6 : Март 10, 2010, 23:17 »

Т.е. сам run() завершается, а работа runnable-класса (c помощью других его методов) завершается после некоторых операций с qwebview.
Ну здесь же все понятно и без слов:
"... с помощью других методов .... после некоторых операций..."   Строит глазки
Поэтому и попросил кода.  Улыбающийся
Записан
niXman
Гость
« Ответ #7 : Март 11, 2010, 00:12 »

думаю что искать ошибку нужно с другой стороны.
access violation - это не ошибка в коде юзера(тем более, в коде на жава).
другое дело, что эта ошибка "порождена" действиями юзера.

но и тут не все так гладко:
1. жава сама управляет памятью.
2. программа падает через произвольное время.

такие ошибки(все кто пишет на С/С++ знает) очень сложно выявить.
обычно помогают всеобразные трасировщики. но опять таки, жава! лично я хз какие можно применить инструменты, для выявления таких ошибок(возникающих на системном уровне), при написании проги на жава.

наверное нужно гуглить...
« Последнее редактирование: Март 11, 2010, 00:16 от niXman » Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #8 : Март 11, 2010, 13:24 »

Эта ошибка попадается и у прогеров на питоне. Так что дело только в самом qt.
Записан

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

Сообщений: 668



Просмотр профиля
« Ответ #9 : Март 11, 2010, 16:52 »

Картина Репина "приплыли". Прога 3 месяца писалась. QT, конечно, может обрадовать в нужный момент, спору нет. Я так думаю предлагать деньги за решение проблемы тоже бессмысленно (на всякий случай - торги можем начать со 100уе Подмигивающий)?
« Последнее редактирование: Март 11, 2010, 17:07 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #10 : Март 11, 2010, 17:38 »

Пересмотри архитектуру, дело не в Qt.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



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

Пересмотри архитектуру, дело не в Qt.
Текст и ссылки выше говорят о прямо противоположном.
Записан

kubuntu/Win7/x64/NetBeans
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #12 : Март 11, 2010, 18:07 »

У меня эта ошибка не раз попадалась при работе с потоками, все сводилось к устранению моих ошибок.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #13 : Март 11, 2010, 18:15 »

У меня эта ошибка не раз попадалась при работе с потоками, все сводилось к устранению моих ошибок.
Почему же тогда тут другая ситуация?
все сводилось к устранению моих ошибок
Например каких? Вы работали с qwebview при этом? Если нет - то мы говорим о разных проблемах.
Вам известно, например, что QNetworkAccessManager использует свои внутренние потоки, которые почему-то не завершаются перед удалением самого QNetworkAccessManager'a (это насколько я понял)? Что-то пока не представляю в каком тут месте ошибка со стороны моего кода.
« Последнее редактирование: Март 11, 2010, 18:20 от serg_hd » Записан

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

Сообщений: 668



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

И ещё заметил, что по мере работы приложения занимаемый им объём оперативной памяти постоянно растёт. На JVM выделено жёстко 256 метров максимум, значит увеличивается за счёт qt. Может что-то надо как-то подчищать? Чистить qwebview, qnetworkaccessmanager пробовал, ситуация только хуже (такая ошибка в этом случае вылезет гораздо раньше). Чистил именно тогда, когда никаких обращений к этим объектам, естественно, больше быть не могло. 
« Последнее редактирование: Март 11, 2010, 19:21 от serg_hd » Записан

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


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