@mxr

Почему может зависать поток в QT Widget?

Программа: Виджет, имеющий большое количество label с текстом.
Из MainWindow вызывается поток (jthread, 20 std) и в него передается ссылка на ui для обновления текста label.
В потоке работает цикл в котором мы получаем данные от сервера и помещаем их в label таким образом:
ui->label->setText(useful_data);
После того как получили данные, ждем минуту и повторяем. Ожидание реализовано через this_thread::sleep_for(s).

По непонятным мне причинам, иногда виджет зависает, видимо вместе и потоком и перестает; запрашивать данные, и обновлять их соответственно. Никаких ошибок при этом нет, виджет просто остается в состоянии последнего обновления(со старыми данными).
Зависание происходит всегда, виджет может отработать как 2 часа не зависая, так и все 12. Думаю важной деталью будет сообщить флаги окна:
setWindowFlags(Qt::SubWindow | Qt::Window | Qt::FramelessWindowHint);

* Qt::SubWindow тут существует для скрытия иконки приложения на панели задач, т.к программа работает как виджет. Зависания происходят и с другими флагами, такими как: Qt::Tool, Qt::ToolTip и т.д.

Я новичок в QT Widget, так что изложил как могу.
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ответы на вопрос 1
@mxr Автор вопроса
Оказывается я ошибался на счет потока, он все-таки продолжал работу. Из-за высокой скорости работы, это было сложно отследить (серверная часть не моя, и почему я не видел активности сети). Но UI при этом перестает обновляться спустя какой-то промежуток времени.
Обновляю принудительно через update() прямо из потока, вроде бы работает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы