Шаблон проектирования, модель / представление Qt и несколько потоков

Я создаю приложение, которое отображает рыночные данные и также использует их в некоторых других формах. Я храню рыночные данные на карте, скажем std :: map . Позвольте мне привести один использованный случай того, как можно использовать эту карту.

  1. сеть отправляет пакет данных, инкапсулирующий данные о запасах в момент времени t. updatePrice (tickerId, latestPrice)
  2. обновляет данные о запасах на карте. Теперь несколько потоков могут получать доступ к данным и обновлять их. Таким образом, карта должна быть заблокирована для поточно-ориентированных операций. Вот первый вопрос: нужно ли мне блокировать и базовые данные для обновлений?
  3. Есть несколько вариантов использования новых данных о запасах, скажем, есть обновление цен на IBM, тогда мне нужно обновить стоимость IBM в моем портфолио. А также отображать новые данные на экране. И одновременно может быть несколько других применений. updatePosition (tickerId, price) и updateStockScreen (tickerId, price) . Кроме того, важно отделить обновления графического интерфейса пользователя от обновления положения, поскольку графический интерфейс не является главной сильной стороной приложения.
  4. Меня просто беспокоит, как реализовать этот тип дизайна. Я читал о дизайне модели / представления в QT для отображения данных, но если поток просмотра читает с той же карты, он должен быть заблокирован. Это приводит к медленному / неэффективному дизайну. Каждый раз, когда представление считывает данные из модели, модель необходимо заблокировать.Предпочтительно ли это в графических интерфейсах реального времени?
  5. Подводя итог, я сохранил множество различных объектов в виде карт. А объекты обновляются в реальном времени. Мне нужно обновить их, а затем использовать в разных местах. Было бы здорово, если бы кто-нибудь мог дать мне небольшой пример того, как реализовать такие конструкции.

Также приветствуются некоторые ссылки на полезные книги.

Я новичок и пытаюсь достичь слишком многого, обладая небольшими знаниями, так что простите меня, если я задавал глупые / неправильно сформулированные вопросы.

Спасибо Shiv

12
задан shiv chawla 28 February 2012 в 16:01
поделиться