Название: QXMPP внутри DLL'ки Отправлено: ufna от Ноябрь 09, 2012, 21:56 Всем привет! :)
В общем, есть дллка, "обычная" (с BOOL WINAPI DllMain , extern C и __declspec(dllexport)). Внутри нее "живет" QXmppClient - в основном ее потоке. В общем все хорошо, работает, коннектится, проблем нет. Проблема начинается когда дллка отрубается от основного приложения, а т.е. ловим DLL_PROCESS_DETACH и начинаем все за собой подчищать. Состоит проблема в том, что если QXmppClient просто "живет" - т.е. создан, заданы ему настройки и пр. - то все ок, он прибивается, вычищается, все отлично. Если же было использовано хотя бы connectToServer, то функция подчистки обрабатывается целиком, но это все - после этого приложение основное остается висеть "навечно". Дебажить "основное" приложение к сожалению никак + дллка подрубается в релизной сборке. Есть какие-нибудь идеи в какую сторону копать? Название: Re: QXMPP внутри DLL'ки Отправлено: ufna от Ноябрь 10, 2012, 00:30 Вопрос снимается - обернул клиент в отдельный тред.
Название: Re: QXMPP внутри DLL'ки Отправлено: ufna от Ноябрь 10, 2012, 01:12 А, нет, проблема в силе :(
Название: Re: QXMPP внутри DLL'ки Отправлено: Bepec от Ноябрь 10, 2012, 09:41 Попробовать сделать полный дисконнект? К сожалению знаком с ним очень поверхностно.
PS мб стоит вызывать qApp->exit(0) этого потока? Название: Re: QXMPP внутри DLL'ки Отправлено: ufna от Ноябрь 10, 2012, 12:35 Не помогает.
Особенность такова: если exit потока (или всего qApp) вызвать _перед_ дисконнектом, то функция disconnectFromServer обрабатывается быстро, все доходит до конца, и висит. если exit'а потока не было "до", то disconnectFromServer "висит" (что странно). Название: Re: QXMPP внутри DLL'ки Отправлено: ufna от Ноябрь 10, 2012, 12:40 Новая особенность - в конце "подчистки" я удаляю созданный ранее QApplication, а т.е.
Код: if(pApp) Как оказалось, виснет именно эта строка. Удивлен О_о Название: Re: QXMPP внутри DLL'ки Отправлено: Bepec от Ноябрь 10, 2012, 12:51 А его разве можно удалять? Помоему его exit'тить надо.
Название: Re: QXMPP внутри DLL'ки Отправлено: ufna от Ноябрь 10, 2012, 13:20 удалять можно
вообще я его не exec()'аю нигде. Сейчас сделал так, что exec() вставляю в самом конце функции очистки, далее по таймеру синглшотов ему quit(). Лог собирать на этом я уже не могу, но оно просто падает. Название: Re: QXMPP внутри DLL'ки Отправлено: ufna от Ноябрь 11, 2012, 15:18 Единственное найденное упоминание в вебе о сходной проблеме: http://lists.trolltech.com/qt-interest/2007-03/thread00011-0.html
Название: Re: QXMPP внутри DLL'ки Отправлено: ufna от Ноябрь 11, 2012, 17:04 Убил лишнее, проблема не решена ;D
Название: Re: QXMPP внутри DLL'ки Отправлено: Bepec от Ноябрь 11, 2012, 18:22 Мини проектик мб?
Название: Re: QXMPP внутри DLL'ки Отправлено: ufna от Ноябрь 12, 2012, 13:03 Танцы с бубном, пересобрано и подключено все в дебаге, результат:
100500 сообщений QSocketNotifier: socket notifiers cannot be disabled from another thread при завершении :( чего делать даже не знаю, лезть внутрь QXmpp наверное :( Сам проект: https://dl.dropbox.com/u/15490650/Files/code_pack.7z (тут кода минимум оставлено) |