Я разработал поток для связи через последовательный порт (в Python, а не в C ++, но это не имеет большого значения) следующим образом:
Существует один поток и две очереди - одна для отправленных и одна для полученных сообщений. Поток всегда прослушивает (асинхронно) как последовательный порт (для принятых данных), так и очередь отправки (для отправки данных, которые приложение просит отправить).
- Если данные поступили на последовательный порт, они помещаются в очередь приема для использования приложения
- Если приложение помещает данные в очередь отправки, поток отправляет их по последовательному порту
Этот дизайн имеет больше смысла для меня, потому что один ресурс (последовательный порт) удерживается одним потоком, а не разделяется двумя. Разбить его на несколько классов для меня звучит излишне, поскольку чтение / запись из очередей и чтение / запись из последовательного порта - тривиальная операция (естественно, последовательный порт заключен в удобный класс - кстати, я действительно рекомендую этот класс Рамона де Кляйна)
О, и это работает очень хорошо.