Производитель/Потребитель Для Того, чтобы говорить с Устройствами Последовательно

Вот моя проблема: Я должен смочь отправить и получить к устройству по сериалу. Это должно быть сделано многопоточным способом. Поток следующие:

  1. Ожидайте устройства, чтобы отправить мне что-то - или, если неактивный, затем запросить состояние, чтобы видеть если онлайн с устройством

  2. Если устройство отправляет мне что-то, то обработайте сообщение, подтвердите и скажите устройству выполнять другие команды по мере необходимости

Прямо сейчас я имею получить поток и передаю поток. Получить поток имеет некоторое время цикл, который продолжает проверять последовательный порт через ReadFile (...) для одного байта. Если у меня есть байт, то я начинаю создавать свой буфер и затем анализирую данные для определения то, что было отправлено мне.

Отправить поток принимает следующее управление, определенное потоком чтения, и отправляет его через WriteFile к тому же COM-порту. Ключ - то, что существуют получить/отправить отношения между мной и устройством.

Мой вопрос, у меня есть вложенная модель Producer/Consumer здесь? Если мой получать поток использует от устройства, и отправить поток производит для устройства, потоки должны по сути говорить так, они - синхронизируемое право? В чем лучший способ состоит в том, чтобы синхронизировать мои усилия эффективно и быстро говорить с устройством?Примечание: Я использую Разработчика C++ 5, который имеет TThreads и может использовать критические разделы и взаимные исключения.

Править: Я также использую опрос, таким образом, я открыт для использования WaitCommEvent также, если это будет работать лучше!

6
задан bmargulies 19 January 2010 в 01:56
поделиться

1 ответ

Какие ресурсы вы должны поделиться, что вы думаете, что вам нужно синхронизировать?

Если у вас есть что-то вроде очереди между двумя потоками, то это довольно классический производитель / модель потребителей. НАПРИМЕР. Если у вас просто есть одно нить, а затем вкладываем команды в очередь, в то время как еще один нить экстракты из очереди, обрабатывают команду и записывают на устройство, вам нужно синхронизировать доступ к очереди с MUTEX или SEMAPHORE.

Возможно, я что-то не хватает, но это должно быть только сложно, если у вас есть несколько потоков, чтение из очереди и командам, которые необходимо передавать, необходимо остаться в заказе. Так что старайтесь держать это просто.

1
ответ дан 17 December 2019 в 22:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: