Я создаю приложение для связи с модулем Xbee через Xbee API.
В настоящее время у меня есть что-то работающее, но оно довольно простое и имеет довольно много ограничений.
Sub processPackets() ' this runs as its own thread
'remove data from serial buffer and format in to packet
'if IO response generated remotely, not requested put in IOQueue
'Otherwise put in CMDQueue (response generate from request, ie cmd response or packet Ack
End Sub
Затем в качестве примера типичного запроса команды Отправка данных на последовательный порт Loop (с таймаутом), проверяющий CMDQueue для пакета, dequeue и проверяем, соответствует ли он В противном случае тайм-аут
Теперь его довольно очевидные потенциальные проблемы с этим методом. В частности, поскольку модули Xbee могут спать, вам, возможно, придется долго ждать Ack. Плюс это зависит от порядка и т.д.
Я хотел бы использовать неблокирующий подход. В этом случае, чтобы действовать в пакете Ack/response, в большинстве случаев мне нужно знать исходный пакет, который он был отправлен в ответ.
Я думаю о создании нескольких потоков. SendPacket отправит пакет, загрузит отправленный пакет, отправленное время и тайм-аут в память, также включит функцию обратного вызова? (Массив?) PacketProc будет анализировать пакеты, проверять массив пакетов, ожидающих ответа, и вызывать функцию обратного вызова. Он также проверит наличие ожидающих пакетов, которые имеют тайм-аут, и вызовет обратный вызов для указания времени ожидания?
В конечном счете я ищу возможность отправлять пакеты на несколько устройств (может отвечать в любом порядке) и действовать на эти ответы или действовать в таймаут.
Я не очень хорошо знаком с .NET. Кто-нибудь может прокомментировать этот подход или рекомендовать лучший образец для поиска? Любые методы .NET, на которые я должен обратить внимание?