C ++ прикладное и аппаратное взаимодействие - PullRequest
0 голосов
/ 05 июля 2011

Проблема в основном в ООП-дизайне. У меня есть класс, который обрабатывает соединение и связь с оборудованием (скажем, через USB) - CommClass. У него мало методов - connect(), disconnect(), read(), write(). Само приложение имеет несколько других классов, которые хотят общаться с тем же HW через CommClass. Вопрос - как ты обычно это делаешь? Я имею в виду несколько идей:

  1. В родительском классе или в главном экземпляре create CommClass вызовите connect() и передайте указатель на все классы (конструкторы). В конце - disconnect().
  2. Каждый метод из каждого класса будет создавать объект CommClass в стеке, когда ему это нужно. - здесь проблема в том, что он должен вызывать метод connect(), чтобы каждый раз запрашивать дескриптор USB и так далее ...
  3. Использовать статические методы из CommClass ...

Ответы [ 2 ]

0 голосов
/ 05 июля 2011

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

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

Дизайн, который я использовалчаще всего (RS232 Comms) используется небольшое изменение того, что вы описываете в (1).У меня есть класс CComms в качестве члена моего основного объекта приложения, который создает поток для запуска связи. Затем у меня есть очень простая система сообщений, похожая на ту, которую использует Windows, которая обрабатывает синхронизацию всех потоков, передавая данные между потоком связи.и основное приложение.Основное приложение имеет несколько простых функций для отправки сообщений от других классов и отправки ответов обратно в соответствующий класс.

Надеюсь, это немного поможет ...

0 голосов
/ 05 июля 2011

Если вы ожидаете иметь единственное соединение с устройством (скажем, USB-устройство), то имеет смысл иметь один единственный экземпляр вашего CommClass или ICommClass, если вы хотите иметь более элегантный дизайн и работус интерфейсом, который реализован вашим CommClass.Вы также можете обернуть соединение (класс или интерфейс) в singleton , чтобы вы могли убедиться, что соединение установлено и удалено только один раз.Это работает лучше всего, если вы ожидаете использовать одно соединение за раз в однопоточном приложении.В многопоточной или многопоточной среде вы можете попробовать использовать пул объектов шаблон проектирования.

...