#233 closed баг (fixed)
Очень долгое завершение программы
Reported by: | alx | Owned by: | dimag |
---|---|---|---|
Priority: | minor | Milestone: | 2 очередь |
Component: | ПО MC04-Dispatcher. Пульт диспетчера/техника | Keywords: | тормоза, threads |
Cc: | san |
Description
r252: нажимаю кнопку "закрыть" окна приложения. Реакции приложения на это никакой нет. Window manager говорит, что приложение не отвечает, содержимое окна не перерисовывается. При этом в консоль продолжают выводиться сообщения об обработанных ESL событиях, как будто программа продолжает работать как ни в чем не бывало.
Пока писал этот тикет, приложение все-таки завершилось без каких-либо сообщений об ошибках. Похоже, завершение программы может длиться от одной секунды до, возможно, нескольких минут. Чаще секунд 10. Что-то здесь не так...
Change History (14)
follow-up: 2 comment:1 by , 8 years ago
comment:2 by , 8 years ago
comment:4 by , 8 years ago
r270. Причина наверно в том,что я дважды закрывал поток RecordsObject, один раз в MainAppFrameWindow3, другой раз в функции main, под Windows это не оказывает влияние, но под Linux может сильно замедлить завершение программы.
comment:5 by , 8 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
comment:6 by , 8 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
Replying to dimag:
SIP соединение было, программы с FreeSwitch сервером.
- И с каким же SIP URI был соединен техник?
- Если SIP-соединение было, почему оно не отображалось на экране?
Или Вы SIP регистрацию называете соединением?
Replying to dimag:
r270. Причина наверно в том,что я дважды закрывал поток RecordsObject?, один раз в MainAppFrameWindow3, другой раз в функции main, под Windows это не оказывает влияние, но под Linux может сильно замедлить завершение программы.
Вот Вы не убедились в том, что проблема решена, а поспешили закрыть тикет с резолюцией fixed. В r270 проблема по-прежнему есть (27 секунд прошло от нажатия до завершения).
follow-up: 8 comment:7 by , 8 years ago
Задержка происходит под Linux при выполнение кода следующей функции:
void MainAppFrameWindow3::closeEvent(QCloseEvent *event)
{
QMainWindow::closeEvent(event);
ptelephonedlg->close();
EventThread.exit(0);
CommandThread.exit(0);
RecordsThread.exit(0);
EventThread.wait();задержка
CommandThread.wait();задержка
RecordsThread.wait();задержка
}
Который я переписал из-за предупреждений о некорректно завершаемых потоках.
В первоначальном варианте где было только
QMainWindow::closeEvent(event);
ptelephonedlg->close();
не было замедления, но были предупреждения.
Может удалить строки с ожиданиями?
comment:8 by , 8 years ago
Replying to dimag:
Может удалить строки с ожиданиями?
Это называется спрятать проблему под ковер. :) Может лучше для начала выяснить, что за работу поток выполняет так долго после получения программой команды завершения?
comment:9 by , 8 years ago
Keywords: | threads added |
---|---|
Resolution: | → fixed |
Status: | reopened → closed |
Как оказалось под linux объект EventThread завершается долго, не хочет закрываться сразу. В новой версии я закрываю этот поток в цикле считывания сообщений по сигналу в глобальной переменной bExitSignal.
Я тестировал работу программы в версии по Ubuntu на моём моноблоке, все теперь завершается быстро, без ожидания завершения потока.
comment:10 by , 8 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
Не помогло. Только что программа завершалась 36 секунд.
Заметил, что в процессе завершения загрузка CPU была близка к нулю. Непонятно, почему завершение EventThread длится так долго, если при этом он не выполняет полезной работы...
follow-up: 13 comment:11 by , 8 years ago
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
r285
Изменил логику завершения программы.
Пробовал у себя на убунту несколько раз, всё завершалось очень быстро.
comment:13 by , 8 years ago
Replying to dimag:
r285
Изменил логику завершения программы.
Пробовал у себя на убунту несколько раз, всё завершалось очень быстро.
Подтверждаю, в r285 проблема пропала.
У меня тоже мысли были вокруг EventsTimer.stop(), но я не смог найти правильного места, где это надо делать (мои эксперименты не дали положительного результата)...
Replying to dimag:
r289
Там всё работает намного лучше и закрывается очень быстро
??? Не вижу здесь принципиальных изменений. Добавлен слот, который нигде не используется, и таймер создается динамически, а не статически...
Долго закрывается SIP-соединение?
У меня не были замеченны такие долгие задержки.