crossplatform.ru

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

wiz29
  опции профиля:
сообщение 2.12.2010, 15:08
Сообщение #1


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

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




Репутация:   12  


Столкнулся со следующей проблемой: имеется некая сцена которая отрисовывается в QImage imgScene. (отрисовка происходит в отдельном потоке) имеется метод для копирования изображения (копия сцены рисутеся в гуи потоке) Возникает следующий эффект http://s013.radikal.ru/i325/1012/d6/792b6748b025.png такое ощущение что картинка еще не успела появится на экране приходит следующий paint event. Вопрос, как можно синхронизировать и почему получается такой эффект (картинка не успевает дорисоваться до конца сверху вниз).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
BRE
  опции профиля:
сообщение 2.12.2010, 16:08
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Вот смотри. Рабочий поток закончил формирование кадра, послал сигнал, этот сигнал положился в очередь GUI-потока, рабочий поток начал изменять картинку, в этот момент происходит переключение на GUI поток, который вызывает слот для копирования картинки, но она уже частично изменилась.
Или само рисование в рабочем потоке тоже закрывается мутексом?

Одно из решений использовать в рабочем потоке двойной буферизации.
Нарисовали кадр на первой картинке, отправили сигнал, переключились на вторую картинку и начали формировать следующий кадр. GUI-поток, получив сигнал о изменении, копирует себе первую готовую картинку. Рабочий поток завершил формировать следующий кадр на второй картинки, отсылает сигнал и переключается на первую, а GUI-поток копирует себе вторую картинку и все повторяется.
В этом варианте тоже есть тонкий момент: если формирующий поток будет успевать формировать несколько кадров, а GUI-поток, соответственно, не будет успевать их получать.

Сообщение отредактировал BRE - 2.12.2010, 16:19
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- wiz29   Моргание при отрисовке QImage   2.12.2010, 15:08
- - BRE   А как происходит синхронизация этих двух изображен...   2.12.2010, 15:13
- - wiz29   Когда картинка содержащая изображение сцены готова...   2.12.2010, 15:17
- - BRE   А в потоке ожидается момент, когда GUI-поток скопи...   2.12.2010, 15:19
- - wiz29   да , там синхронизация по мьютексу но копировани...   2.12.2010, 15:22
- - BRE   Т.е. ты посылаешь сигнал и блокируешь поток. А раз...   2.12.2010, 15:23
- - wiz29   ну когда срабатывает слот у объекта gui потока он ...   2.12.2010, 15:48
- - BRE   Вот смотри. Рабочий поток закончил формирование ка...   2.12.2010, 16:08
- - wiz29   Щас попробую, просто ощущение создалось такое что ...   2.12.2010, 16:32
|- - BRE   Цитата(wiz29 @ 2.12.2010, 16:32) не не по...   2.12.2010, 16:35
- - wiz29   ну не создавать каждый раз в paintEvent новый паин...   2.12.2010, 16:38
|- - BRE   Цитата(wiz29 @ 2.12.2010, 16:38) ну не со...   2.12.2010, 16:48
- - wiz29   мне это тоже показалось весьма странным, но я попр...   2.12.2010, 17:28
- - wiz29   Разобрался с проблемой. Просто у нас есть некое дв...   3.12.2010, 10:53


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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 22.6.2025, 22:00