crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Улучшение отзывчивости многопотчонной программы
RazrFalcon
  опции профиля:
сообщение 11.11.2011, 18:25
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Есть GUI который создает еще 2-а потока (всего ядер на компе 2-а).
При этом, потоки полностью самостоятельные, и посылают главному потоку только сигналы о прогрессе и когда нужно создать новое привью.
Привью создается так: создается класс-виджет и добавляется в FlowLayout. Больше главный поток ничего не делает.

Но, при работе потоков, GUI пользоваться не возможно. Он тупо не откликается на нажатия. Хотя через время все таки реагирует.

Вопрос: как увеличить отзывчивость GUI? Нужно что бы дочерние потоки совершенно не влияли на работу главного.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 11.11.2011, 18:42
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Тоже такое встретил. Не знаю как объяснить. Запускаю поток на выполнение с помошью QtConcurrent. В том смысле, что вызываю метод start потока через QtConcurrent.

Сообщение отредактировал silver47 - 11.11.2011, 18:43
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 11.11.2011, 18:49
Сообщение #3


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Я создаю QThread. Затем создаю свой класс (не знаю как это правильно называется :unsure: ), то есть:
MyClass *myClass = new MyClass;
а затем:
myClass->moveToTread(мой_поток);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 11.11.2011, 19:52
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Если не будет других советов, то запускайте каждый из своих потоков чере QtConncurent, думаю поможет, но думаю, что неправильно, но другого пути не знаю. У меня такая ситуация, например с COM портами, если они виртуальные и транслируются через интернет, то велика веротность, что при низкой скорости порт будет открываться \ закрываться продолжительное время. На это время GUI виснет, вот это я не смог победить даже через QtConncurent

Сообщение отредактировал silver47 - 11.11.2011, 19:54
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DOGG
  опции профиля:
сообщение 14.11.2011, 10:41
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 9.8.2011
Из: Калининград
Пользователь №: 2798

Спасибо сказали: 6 раз(а)




Репутация:   0  


Можно попробовать при запуске потоков, которые не работают с интерфейсом, назначить им приоритет ниже среднего.

Сообщение отредактировал DOGG - 14.11.2011, 10:42
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 14.11.2011, 15:32
Сообщение #6


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Цитата(DOGG @ 14.11.2011, 9:41) *
Можно попробовать при запуске потоков, которые не работают с интерфейсом, назначить им приоритет ниже среднего.

Это только в винде. В Linux приоритеты только от рута, вроде.

Наткнулся на хорошую статью: http://doc.qt.nokia.com/qq/qq27-responsive-guis.html
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.11.2024, 5:22