![]() |
|
|
![]()
|
|
| Elfet |
|
||||||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Всем привет!
Добавил в свою программу блокировку данных при помощи мьютекса из boost::mutex. Но теперь стал интерфейс сильно тормозить. Вот как это у меня работает:
Мьютекс находится в классе Solver, блогирую я его тут: Функция Solver::Iteration(int&p):
И в функции обновления интерфейса (она соединена со сигналом emit Progress(i))
Интерфейс сильно тормозит. Можно ли что-нибудь сделать что бы он не тормозил? Заранее спасибо! |
||||||
|
|||||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Ты блокируешь функции обработки и отрисовки целиком. Попробуй определить место, где обработка и отображение обращаются к одним и тем же данным, и заблокировать только это место. А ещё лучше перед использованием данных в отображении заблокировать mutex, скопировать необходимые данные во временные переменные, разблокировать mutex и спокойно отображать сохранённые копии. При этом блокировать можно всю функцию обработки
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
А если данные очень большие? Я отображаю сетку (10тыс. - 100тыс. узлов) и копировать её целиком достаточно проблематично. Дольше всего работает естественно функция отрисовки сетки в интерфейсе. В библиотеке же дольше всего итерации по этой сетки. Есть ли какие-нибудь ещё альтернативы?
Кстати хотел спросить кое-что ещё: я собираю библиотеку, которая должна потом использоваться в многопоточном приложении и хочу главный класс-интерфейс этой библиотеки разместить в синглтоне (потокобезопасном). Нормально ли это? |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
неужели на каждом шаге обработки необходимо отображать все данные? Может стоит перекинуть часть обработки графика в поток (например подготовить там список QPoint'ов и скопировать его в интерфейсный поток). Может стоит отображать не на каждом шаге, а, например, каждый десятый.
синглтон - зло. Это правило, из которого всегда есть исключения, однако по собственному опыту неоднократно в этом правиле убеждался. Лучше заблокировать данные на момент их копирования, чтобы обеспечить потокобезопасность. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Данные нужно бы отображать на каждом шаге - иначе не понятно как решение распространяться. Странно вот что мне если я соединяю с помощью Qt::BlockingQueuedConnection:
То интерфейс перестаёт тормозить. |
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 5 Всего: 44 |
офтоп: а зачем Вам boost::mutex? Ведь есть же QMutex
|
|||
|
||||
| Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
chaos, мы в библиотеке не используем Qt. Qt только в интерфейсе.
|
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |