Какой инструментарий использовать для создания более одной нити в живописи? Свинг, GWT, FX, Qt или что? - PullRequest
1 голос
/ 03 июня 2010

Я хочу написать приложение для нескольких цветов - программу, которая позволяет пользователям с разных компьютеров рисовать одновременно на одном изображении.Какой инструментарий я должен использовать?

Я уже обнаружил, что Jambi не подходит в этом случае, потому что:

Any number of threads can paint at any given time, however only one thread at a time can paint on a given paint device. In other words, two threads can paint at the same time if each paints onto separate QImages, but the two threads cannot paint onto the same QImage at the same time.

(http://doc.trolltech.com/qtjambi-4.4/html/com/trolltech/qt/qtjambi-threads.html#creating-a-thread) * +1010 *

1 Ответ

3 голосов
/ 03 июня 2010

Набор инструментов, в котором вы наиболее опытны.

Вы можете реализовать это в любом наборе инструментов, если вы правильно разработали приложение; например:

  • Вам не понадобится «многопоточная» окраска, так как пользователи, похоже, будут рисовать эффект параллельной окраски: вместо этого
  • Используйте события. Отправляйте события, такие как «рисовать кривую» или «рисовать прямую линию», чтобы уведомить всех участников об обновлениях чертежа.
  • Использовать синхронизацию кадров. Каждый участник хранит стек событий, упорядоченных по времени возникновения, который обновляется событиями, сгенерированными пользователем (например, «нарисовать это» и «нарисовать это»). Регулярно клиент отправляет свой стек событий другим участникам.
  • Реализация собственной «сборки мусора»: если событие не изменяет какие-либо пиксели из-за того, что другие события перекрывают его, его можно отбросить (удалить из стека), чтобы повысить производительность при синхронизации кадров и рисования.
  • Реализация свертывания событий. Например, 4 события, говорящие: «нарисовать линию от x до y», «нарисовать линию от y до z» и т. Д., Могут быть свернуты в форме траектории.

Клиенту нужно будет только прослушивать события и добавлять их в свой локальный кадр, рисовать общий кадр (каждый раз рисуя, перерисовывая все события на пустом холсте), отправлять события по сети другим клиентам и прослушивать для событий и ключевых кадров от других клиентов.

Чертеж однопоточный: он будет собирать все стеки (локальные и для каждого участника), упорядочивать их по времени появления и раскрашивать в таком порядке. Это поддерживается всеми упомянутыми каркасами.

Впрочем, #complex #dynamic #system.

...