Russian Qt Forum
Июнь 16, 2024, 01:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: Зависание GUI  (Прочитано 15458 раз)
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #30 : Март 20, 2012, 16:23 »

получается данные приходят по сети, каждые 12 мс и это реализовано в отдельном потоке.. а отрисовка происходит по таймеру, каждые 40 мс (вызывается updateGL()) в GUI потоке! Данные накапливаются в глобальной структуре и каждые 40 мс отрисовываются на экране средствами OpenGL! при этом при открытии диалоговых окон, нажатии на кнопки программа чуток подвисает и в этот момент данные могут не отрисоваться (в случае открытия диалоговых окон)..
Записан
Bepec
Гость
« Ответ #31 : Март 20, 2012, 16:49 »

Помоему у вас что-то с архитектурой. Т.е. к примеру у вас каждые 15 мс полная отрисовка + приём данных в основном потоке.
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #32 : Март 20, 2012, 17:33 »

может быть и с архитектурой.. ибо прога переделывается не из лучшего варианта! но сейчас реализовано так, что данные принимаются в отдельном потоке (не в главном), а отрисовываются в главном через глобальную структуру! если не использовать эту глобальную структуру, то как передать данные из дочернего потока в главный?
Записан
V1KT0P
Гость
« Ответ #33 : Март 20, 2012, 17:37 »

может быть и с архитектурой.. ибо прога переделывается не из лучшего варианта! но сейчас реализовано так, что данные принимаются в отдельном потоке (не в главном), а отрисовываются в главном через глобальную структуру! если не использовать эту глобальную структуру, то как передать данные из дочернего потока в главный?
Пошли сигнал с указателем на структуру.
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #34 : Март 20, 2012, 17:45 »

так это будет правельнее, чем использование глобальной структуры? тобишь накапливать данные сколько мне нужно, а как понадобиться отрисовать отослать сигнал с указателем на структуру и перерисовать?
Записан
V1KT0P
Гость
« Ответ #35 : Март 20, 2012, 17:50 »

так это будет правельнее, чем использование глобальной структуры? тобишь накапливать данные сколько мне нужно, а как понадобиться отрисовать отослать сигнал с указателем на структуру и перерисовать?
Да.
Записан
arttr
Гость
« Ответ #36 : Март 20, 2012, 18:11 »

Vladimir, возможно я не правильно объясняю, возможно Вы меня просто не хотите понять.
Давайте попробуем еще раз на пальцах(с потоками в Qt не так просто, как кажется на первый взгляд): разберем, что происходит. В ГУИ-потоке живет некая глобальная структура; в ГУИ-потоке живут все виджеты и вся графика, их отрисовка происходит в цикле событий ГУИ-шного потока. Также, у Вас есть дочерний поток, который держит некое сетевое соединение. У этот дочерний поток крутит свой цикл обработки событий и именно в нем работает сокет сетевое соединение. Из дочернего потоке Вы ломитесь в главный поток, чтобы записать данные в структуру. и на этом цикл обработки событий гуи-потока притормаживается(читайте "притормаживается графика"), т.к. главный поток в это время посто ждет. Внимательно прочитайте http://habrahabr.ru/post/115830/, особенно пункты "События и цикл обработки событий" и "Блокирование цикла обработки событий". Человек все подробно и просто расписал.
Насчет как передавать эту структуру для отрисовки, V1KT0P предложил:
Цитировать
Пошли сигнал с указателем на структуру.
тоже самое предлагал я раньше:
Цитировать
делайте структуру в своем дочернем потоке и эмитируйте куда хотите
добавлю только что лучше передавать константную ссылку или просто копию.
« Последнее редактирование: Март 20, 2012, 18:13 от arttr » Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #37 : Март 20, 2012, 18:28 »

Обязательно почитаю! Спасибо за помощь, буду пробовать..
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.144 секунд. Запросов: 22.