Russian Qt Forum

Qt => Вопросы новичков => Тема начата: once_again_abc от Октябрь 22, 2011, 12:34



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

Что это может быть? Глюк винды или Qt?  ???


Название: Re: Очень странное поведение Qt
Отправлено: BRE от Октябрь 22, 2011, 12:54
Что это может быть? Глюк винды или Qt?  ???
Если операционная система ничего не может сделать с приложением пользователя - это чей глюк? :)


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

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

вы запускаете приложение потом закрываете его. убеждаетесь что висящих процессов и утечек памяти нет. затем повторяете цикл и так эндцать тысяч раз... и в один прекрасный момент (это может быть в тот же день, может быть через три дня (если не перезагружать систему)) приложение виснет на самом интересном месте в DispatchMessage в ядре Qt - это чей глюк? :)


Название: Re: Очень странное поведение Qt
Отправлено: BRE от Октябрь 22, 2011, 16:26
Я как раз говорил про ОС. Если ОС ничего не может сделать с одним из своих процессов, то это ее глюк! АднАзначнА! :)
И не важно чем это вызвано, ошибкой в приложении или в оси.


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


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

а какие-нибудь идеи вообще о том что это может быть? само поведение бага очень странное - как-будто какая-то ошибка накапливается (где?) и происходит такой вот странный глюк. я внимательно проверял - приложение нормально закрывается, его процесс не остается висеть; вся память взятая для приложения всегда возвращается в систему; само приложение с памятью работает корректно (профилировщик не запускал, но манагер процессов показывает отсутсвие утечек). у Qt есть какие-то глобальные обще-системные ресурсы (счетчики какие-нибудь и т.п.)?


Название: Re: Очень странное поведение Qt
Отправлено: BRE от Октябрь 23, 2011, 08:37
Идеи... попробуй отключить все антивирусы и т.д., а лучше по запускать программу на чистой машине.
Если ты точно определил место остановки (DispatchMessage), то скорее всего остановка происходит в момент запроса очередного сообщения от венды. Управление уходит в ядро системы и от туда не возвращается.

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

Внутри программы ты "сам себе" сообщения не отправляешь? Может при каких-то условиях программа начинает генерировать сообщения непрерывно и ядро Qt не успевает их обслуживать?


Название: Re: Очень странное поведение Qt
Отправлено: once_again_abc от Ноябрь 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;


Название: Re: Очень странное поведение Qt
Отправлено: vinnitu от Ноябрь 15, 2011, 11:08
мне кажется дело в антивирусах и т.п. - у вас они установлены?


Название: Re: Очень странное поведение Qt
Отправлено: once_again_abc от Ноябрь 15, 2011, 11:34
мне кажется дело в антивирусах и т.п. - у вас они установлены?

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

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


Название: Re: Очень странное поведение Qt
Отправлено: vinnitu от Ноябрь 15, 2011, 17:33
мне кажется дело в антивирусах и т.п. - у вас они установлены?

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

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

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


Название: Re: Очень странное поведение Qt
Отправлено: Igors от Ноябрь 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 не использует нативных контролов, откуда вообще берется нативное сообщение для комбо - неясно


Название: Re: Очень странное поведение Qt
Отправлено: BRE от Ноябрь 15, 2011, 18:31
По крайней мере у Вас есть hwnd окна - и можно посмотреть что это за окно.
Ну так это скорее всего hwnd top-окна Qt приложения и есть.