@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, так что изложил как могу.
  • Вопрос задан
  • 132 просмотра
Пригласить эксперта
Ответы на вопрос 1
@mxr Автор вопроса
Оказывается я ошибался на счет потока, он все-таки продолжал работу. Из-за высокой скорости работы, это было сложно отследить (серверная часть не моя, и почему я не видел активности сети). Но UI при этом перестает обновляться спустя какой-то промежуток времени.
Обновляю принудительно через update() прямо из потока, вроде бы работает.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
29 мар. 2024, в 15:28
10000 руб./за проект
29 мар. 2024, в 15:11
50000 руб./за проект
29 мар. 2024, в 15:06
50000 руб./за проект