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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Спонтанное закрытие GUI-приложения  (Прочитано 6518 раз)
astramax57
Гость
« : Декабрь 10, 2012, 17:12 »

Доброго всем!
Пришла беда откуда не ждали )

Итак, есть GUI-приложение, qt-4.7.1, статическая линковка, VS 2008. Главное окно - наследник от QMainWindow.
Приложение запускается на 12 серверах с WS2008 R2 и ровно через 3 суток корректно закрывается, причем
одновременно на всех серверах. В логах ничего странного, в журналах ОС тоже.

Провожу эксперимент. Запускаю приложение под отладкой, ставлю бряк на входе closeEvent. Проходит 3 суток  - ничего. Проходит еще 14 часов - и бряк сработал.
Ниже привожу callStack. На первый взгляд смущает название функции sendSpontaneousEvent ). Погуглил - пишут что-от про флаг WA_QuitOnClose, но он определяет завершать работу приложения после закрытия окна или нет, а окно явно никто не закрывал.

Сейчас прога под отладкой висит. Думаю, что делать. Может кто сталкивался с таким поведением?

зы Сейчас перешел на 12 студию и кьют 4,8,4, но проблема все-равно актуальна именно для старых версий. Так что советы вроде "а не попробовать ли более новую версию" не совсем уместны. Может и поможет, но надо разобраться с непонятным поведением )

Заранее спасибо.

Итак, callStack

    manager.exe!manager::closeEvent(QCloseEvent * e=0x0000000000229560)  Line 2643   C++
    manager.exe!QWidget::event(QEvent * event=0x0000000000229560)  Line 8359   C++
    manager.exe!QMainWindow::event(QEvent * event=0x0000000000229560)  Line 1479   C++
>   manager.exe!QApplicationPrivate::notify_helper(QObject * receiver=0x0000000001c77640, QEvent * e=0x0000000000229560)  Line 4445 + 0x15 bytes   C++
    manager.exe!QApplication::notify(QObject * receiver=0x0000000001c77640, QEvent * e=0x0000000000229560)  Line 4410 + 0x1d bytes   C++
    manager.exe!QCoreApplication::notifyInternal(QObject * receiver=0x0000000001c77640, QEvent * event=0x0000000000229560)  Line 732 + 0x26 bytes   C++
    manager.exe!QCoreApplication::sendSpontaneousEvent(QObject * receiver=0x0000000001c77640, QEvent * event=0x0000000000229560)  Line 218 + 0x4c bytes   C++
    manager.exe!QWidgetPrivate::close_helper(QWidgetPrivate::CloseMode mode=CloseWithSpontaneousEvent)  Line 7765   C++
    manager.exe!QETWidget::translateCloseEvent(const tagMSG & __formal={...})  Line 3860   C++
    manager.exe!QtWndProc(HWND__ * hwnd=0x0000000000010648, unsigned int message=0x00000010, unsigned __int64 wParam=0x0000000000000000, __int64 lParam=0x0000000000000000)  Line 2154   C++
    user32.dll!00000000776a9bd1()    
    [Frames below may be incorrect and/or missing, no symbols loaded for user32.dll]   
    user32.dll!00000000776a72cb()    
    user32.dll!00000000776a6829()    
    ntdll.dll!0000000077901225()    
    user32.dll!00000000776a685a()    
    user32.dll!00000000776a68a2()    
    user32.dll!00000000776a760e()    
    uxtheme.dll!000007fefbe0795a()    
    uxtheme.dll!000007fefbe2637a()    
    uxtheme.dll!000007fefbe0168e()    
    uxtheme.dll!000007fefbe01445()    
    user32.dll!00000000776a89d3()    
    manager.exe!QWinInputContext::DefWindowProcW(HWND__ * hwnd=0x0000000000010648, unsigned int msg=0x00000112, unsigned __int64 wParam=0x000000000000f060, __int64 lParam=0x0000000000000555)  Line 365 + 0x19 bytes   C++
    manager.exe!QtWndProc(HWND__ * hwnd=0x0000000000010648, unsigned int message=0x00000112, unsigned __int64 wParam=0x000000000000f060, __int64 lParam=0x0000000000000555)  Line 2636 + 0x2b bytes   C++
    user32.dll!00000000776a8971()    
    user32.dll!00000000776a72cb()    
    user32.dll!00000000776a6829()    
    ntdll.dll!0000000077901225()    
    user32.dll!00000000776a685a()    
    user32.dll!00000000776a68a2()    
    user32.dll!00000000776a760e()    
    uxtheme.dll!000007fefbe0795a()    
    uxtheme.dll!000007fefbe26425()    
    uxtheme.dll!000007fefbe0168e()    
    uxtheme.dll!000007fefbe01445()    
    user32.dll!00000000776a89d3()    
    manager.exe!QWinInputContext::DefWindowProcW(HWND__ * hwnd=0x0000000000010648, unsigned int msg=0x000000a1, unsigned __int64 wParam=0x0000000000000014, __int64 lParam=0x0000000000000555)  Line 365 + 0x19 bytes   C++
    manager.exe!QtWndProc(HWND__ * hwnd=0x0000000000010648, unsigned int message=0x000000a1, unsigned __int64 wParam=0x0000000000000014, __int64 lParam=0x0000000000000555)  Line 2636 + 0x2b bytes   C++
    user32.dll!00000000776a9bd1()    
    user32.dll!00000000776a98da()    
    manager.exe!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> * flags=0x000000000022f660)  Line 807   C++
    manager.exe!QGuiEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> * flags=0x000000000022f6ac)  Line 1170 + 0x26 bytes   C++
    manager.exe!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> * flags=0x000000000022f718)  Line 150   C++
    manager.exe!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> * flags=0x000000000022f7a0)  Line 201 + 0x53 bytes   C++
    manager.exe!QCoreApplication::exec()  Line 1009 + 0x23 bytes   C++
    manager.exe!QApplication::exec()  Line 3720   C++
    manager.exe!main(int argc=0x00000001, char * * argv=0x0000000001c63fb0)  Line 129 + 0x5 bytes   C++
    manager.exe!WinMain(HINSTANCE__ * instance=0x000000013f610000, HINSTANCE__ * prevInstance=0x0000000000000000, char * __formal=0x0000000000265520, int cmdShow=0x00000001)  Line 131 + 0x16 bytes   C++
    manager.exe!__tmainCRTStartup()  Line 263 + 0x42 bytes   C
    manager.exe!WinMainCRTStartup()  Line 182   C
    kernel32.dll!00000000777a652d()    
    ntdll.dll!00000000778dc521()    
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Декабрь 10, 2012, 19:00 »

прога получает close для основного окна. Возможно, это делает система по каким-то признакам для долго работающих приложений, раз вылетают сразу все проги на разных машинах, и событие имеет статус spontaneous.
Записан
astramax57
Гость
« Ответ #2 : Декабрь 11, 2012, 07:46 »

Согласен.
Вот это - QtWndProc(HWND__ * hwnd=0x0000000000010648, unsigned int message=0x00000010, unsigned __int64 wParam=0x0000000000000000, __int64 lParam=0x0000000000000000) не что иное как WM_CLOSE.
Т.е. система явно закрывает приложение.
В чем причина? Приложение работает и с сетью, и с файлами, и память выделяет. То есть для системы оно явно не выглядит "спящим".
Записан
Serr500
Гость
« Ответ #3 : Декабрь 11, 2012, 08:27 »

Возможно, приложение запускается планировщиком и в свойствах задания стоит максимальное время выполнения.
Записан
astramax57
Гость
« Ответ #4 : Декабрь 11, 2012, 08:35 »

Да, на серверах (которых 12 штук ) оно запускается через планировщик, с другой машины! Очень похоже, что копать нужно именно в эту сторону. Спасибо.
Однако на моей машине под отладкой (соответственно без планировщика) возникла описанная выше ситуация.
« Последнее редактирование: Декабрь 11, 2012, 08:41 от astramax57 » Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #5 : Декабрь 11, 2012, 11:00 »

Может ОС думает что приложение зависло (мало ли по каким причинам) и шлет ему сигнал о закрытии главного окна - это как вариант.
Записан
astramax57
Гость
« Ответ #6 : Декабрь 14, 2012, 09:46 »

Попробую с  Qt 4.8.4  и под 11 студией
Записан
astramax57
Гость
« Ответ #7 : Декабрь 20, 2012, 07:52 »

Итак, Qt 4.8.4  и 11 студия. Почти 6 суток, полет нормальный. Жду дальше.
Записан
astramax57
Гость
« Ответ #8 : Декабрь 27, 2012, 14:48 »

Программа проработала почти 13 суток, дальше ждать не хочу.
Думаю проблема решена. Только вот не понятно, в чем именно была причина.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #9 : Декабрь 27, 2012, 23:07 »

Программа проработала почти 13 суток, дальше ждать не хочу.
Думаю проблема решена. Только вот не понятно, в чем именно была причина.

а попробуй 4.7.1 с mingw
Записан
astramax57
Гость
« Ответ #10 : Декабрь 29, 2012, 11:02 »

а попробуй 4.7.1 с mingw

спасибо за  предложение, но я не использую mingw
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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