Я работаю с приложением QT GUI, у которого возникают проблемы при обработке событий во время деструктора QApplicaton. Библиотека, которую я использую (которую я не могу изменить), использует QEventLoop. Он записал некоторые данные в сокет и, похоже, ожидает ответа. Отладчик показывает, что QEventDispatcherWin32 :: processEvents зацикливается и загружает процессор.
Мне удалось заставить его работать, удалив некоторые конкретные виджеты ранее. Тем не менее, это кажется немного случайным!
Мы покидаем наш сервер, когда виджет уничтожен. В зависимости от того, какие виджеты созданы, я иногда зависаю, а иногда нет.
Это вызов exec, который зависает -
m_timedout = false;
QEventLoop loop;
QTimer timer;
timer.setSingleShot(true);
connect(&timer, SIGNAL(timeout()), this, SLOT(slt_timeout()));
connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
timer.start(1800000);
connect(this, SIGNAL(sig_response(int, int, QByteArray)), &timer, SLOT(stop()));
connect(this, SIGNAL(sig_response(int, int, QByteArray)), &loop, SLOT(quit()));
loop.exec(QEventLoop::ExcludeUserInputEvents);
Так что я спрашиваю? Я очень плохо знаком с QT и не понимаю всех концепций, но меня беспокоит, что мы полагаемся на обработку событий QT во время деструктора приложения. Это действительная вещь? Разве QT не начал сворачиваться?
Есть ли что-нибудь еще, что могло бы вызвать это зависание?