Отображение данных в реальном времени - PullRequest
0 голосов
/ 04 апреля 2011

Я разрабатываю приложение для сбора данных о транспортных средствах и их отображения в приложении.Я пытаюсь понять, какой будет лучшая архитектура моей программы.Я планирую использовать Qt для моего графического интерфейса (QPainter), и у меня есть специальное оборудование, которое собирает данные с датчиков.Я думал, что аппаратный ввод-вывод будет находиться в приложении, которое визуализирует графику в своем собственном потоке, но теперь я думаю, что было бы лучше поместить весь аппаратный ввод-вывод в отдельный процесс и установить связь междупроцессы с некоторым протоколом IPC (не уверен, какой именно).

Что вы, ребята, рекомендуете мне делать.Это также было бы моим первым написанием многопроцессорного приложения.

1 Ответ

0 голосов
/ 04 апреля 2011

Я писал такие вещи сотни раз.Безусловно, лучшим решением является разделение выделенного оборудования на два потока или задачи:

  • один, который выполняет все необходимые операции в реальном времени
  • другой, который отвечает на запросы данных и команды отпользовательский интерфейс

Эти два потока взаимодействуют друг с другом для обеспечения согласованного пространства переменных общего доступа, защищенного семафорами.Второй поток выполняет весь свой анализ и еще много чего до блокировки общего пространства, делает копию того, что ему нужно, и разблокирует.Цель состоит в том, чтобы ограничить интервал блокировки как можно более коротким временем.Часто бывает целесообразно объединить все общие переменные в одну структуру и использовать массив memcpy(), даже если интерес представляют только несколько членов.Чем проще это взаимодействие, тем лучше.

Пользовательский интерфейс содержит

  • экранов, которые, когда они видимы и активны, вызывают периодические запросы к модулю данных

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...