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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Очень странное поведение Qt  (Прочитано 6506 раз)
once_again_abc
Гость
« : Октябрь 22, 2011, 12:34 »

В процессе разработки приложения (компиляция, запуски) в один "прекрасный" момент приложение виснет при очередном запуске и висит бесконечно в qeventdispatcher_win.cpp:QEventDispatcherWin32::processEvents:DispatchMessage(&msg);
Помогает _только_ перезагрузка системы (Виндовс 7)

Что это может быть? Глюк винды или Qt?  Непонимающий
Записан
BRE
Гость
« Ответ #1 : Октябрь 22, 2011, 12:54 »

Что это может быть? Глюк винды или Qt?  Непонимающий
Если операционная система ничего не может сделать с приложением пользователя - это чей глюк? Улыбающийся
Записан
once_again_abc
Гость
« Ответ #2 : Октябрь 22, 2011, 14:02 »

Что это может быть? Глюк винды или Qt?  Непонимающий
Если операционная система ничего не может сделать с приложением пользователя - это чей глюк? Улыбающийся

обычно в 99.99% глюк в приложении как вы тонко намекаете =) но в моем случае это возможно и не так. собственно поэтому я и вынес вопрос сюда.  в Qt есть еще миллион + 1 глюков, я в этом уверен. и вполне возможно, что проявляется один из них.

вы запускаете приложение потом закрываете его. убеждаетесь что висящих процессов и утечек памяти нет. затем повторяете цикл и так эндцать тысяч раз... и в один прекрасный момент (это может быть в тот же день, может быть через три дня (если не перезагружать систему)) приложение виснет на самом интересном месте в DispatchMessage в ядре Qt - это чей глюк? Улыбающийся
Записан
BRE
Гость
« Ответ #3 : Октябрь 22, 2011, 16:26 »

Я как раз говорил про ОС. Если ОС ничего не может сделать с одним из своих процессов, то это ее глюк! АднАзначнА! Улыбающийся
И не важно чем это вызвано, ошибкой в приложении или в оси.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Октябрь 22, 2011, 17:13 »

Удовлетворение от выяснения "а чей же баг" мне понятно (Вындоуз способно на очень, очень многое), но оно мало что меняет, спросят-то с программиста. Поэтому для начала надо сделать static build Qt и попробовать вставить туда хоть какие-то принты в лог - ну и конечно прицепить сам лог. Дело не быстрое но другого не видно.
Записан
once_again_abc
Гость
« Ответ #5 : Октябрь 23, 2011, 06:27 »

Удовлетворение от выяснения "а чей же баг" мне понятно (Вындоуз способно на очень, очень многое), но оно мало что меняет, спросят-то с программиста. Поэтому для начала надо сделать static build Qt и попробовать вставить туда хоть какие-то принты в лог - ну и конечно прицепить сам лог. Дело не быстрое но другого не видно.

а какие-нибудь идеи вообще о том что это может быть? само поведение бага очень странное - как-будто какая-то ошибка накапливается (где?) и происходит такой вот странный глюк. я внимательно проверял - приложение нормально закрывается, его процесс не остается висеть; вся память взятая для приложения всегда возвращается в систему; само приложение с памятью работает корректно (профилировщик не запускал, но манагер процессов показывает отсутсвие утечек). у Qt есть какие-то глобальные обще-системные ресурсы (счетчики какие-нибудь и т.п.)?
Записан
BRE
Гость
« Ответ #6 : Октябрь 23, 2011, 08:37 »

Идеи... попробуй отключить все антивирусы и т.д., а лучше по запускать программу на чистой машине.
Если ты точно определил место остановки (DispatchMessage), то скорее всего остановка происходит в момент запроса очередного сообщения от венды. Управление уходит в ядро системы и от туда не возвращается.

Диспетчер сообщений в Qt это критическая, постоянно нагруженная подсистема, к тому же без возможности ее неправильной настройки. Поэтому, если бы там была подобная ошибка, она бы проявлялась значительно чаще и не только у тебя.

Внутри программы ты "сам себе" сообщения не отправляешь? Может при каких-то условиях программа начинает генерировать сообщения непрерывно и ядро Qt не успевает их обслуживать?
Записан
once_again_abc
Гость
« Ответ #7 : Ноябрь 15, 2011, 00:14 »

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

Само сообщение, на котором спотыкается DispatchMessage такое:

Код:
typedef struct tagMSG {
  HWND   hwnd;               = 0x000302b4
  UINT   message;            = 1025 // CBEM_INSERTITEMA
  WPARAM wParam;          = 0
  LPARAM lParam;             = 0 // - как такое может быть в Qt? комбо еще не создан, а фреймворк уже пытается ему что-то отправлять!
  DWORD  time;                = 338412
  POINT  pt;                      = { 752, 410 }
} MSG, *PMSG;
Записан
vinnitu
Гость
« Ответ #8 : Ноябрь 15, 2011, 11:08 »

мне кажется дело в антивирусах и т.п. - у вас они установлены?
Записан
once_again_abc
Гость
« Ответ #9 : Ноябрь 15, 2011, 11:34 »

мне кажется дело в антивирусах и т.п. - у вас они установлены?

работает TrendMicro OfficeScan. но я не вижу абсолютно никакой связи между этим глюком и наличием антивируса. Просветите?

похоже, что где-то в глубинах кьюта все же порылся таки жучок.
Записан
vinnitu
Гость
« Ответ #10 : Ноябрь 15, 2011, 17:33 »

мне кажется дело в антивирусах и т.п. - у вас они установлены?

работает TrendMicro OfficeScan. но я не вижу абсолютно никакой связи между этим глюком и наличием антивируса. Просветите?

похоже, что где-то в глубинах кьюта все же порылся таки жучок.

глубины возможно в атнивирусах потому что они проверяют откуда появляются файлы... я так предполагаю... например после компиляции появляется чуть-чуть изменённая вариация файла .exe с таким же именем в том же месте. Это возможно немного "удивляет" антивирус. В общем-то говоря у меня был Comodo (есть такой), и вот подобные проблемы имели место - и никто бы ничего не подумал, т.к. никаких сообщений не было, а вот как только удалили это чудо природы - всё стало работать отлично. Так же не дружит Касперский с девелоперами...
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Ноябрь 15, 2011, 18:13 »

Само сообщение, на котором спотыкается DispatchMessage такое:

Код:
typedef struct tagMSG {
  HWND   hwnd;               = 0x000302b4
  UINT   message;            = 1025 // CBEM_INSERTITEMA
  WPARAM wParam;          = 0
  LPARAM lParam;             = 0 // - как такое может быть в Qt? комбо еще не создан, а фреймворк уже пытается ему что-то отправлять!
  DWORD  time;                = 338412
  POINT  pt;                      = { 752, 410 }
} MSG, *PMSG;
По крайней мере у Вас есть hwnd окна - и можно посмотреть что это за окно. его родителя, не одна утилита это делает. Qt не использует нативных контролов, откуда вообще берется нативное сообщение для комбо - неясно
Записан
BRE
Гость
« Ответ #12 : Ноябрь 15, 2011, 18:31 »

По крайней мере у Вас есть hwnd окна - и можно посмотреть что это за окно.
Ну так это скорее всего hwnd top-окна Qt приложения и есть.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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