Здравствуйте, todritab, Вы писали:
T>Есть некое устройство. Подключается к компьютеру через COM или USB.
T>Протокол обмена: T>Компьютер посылает запрос — устройство присылает ответ. В случае ошибки, ответ может и не прийти. T>При некоторых событиях устройство может послать сообщение компьютеру само, без запроса.
T>Пока я использую самую примитивную реализацию: посылаю запрос и некоторое время жду ответа. В первом приближении это работает, но валится, если устройство само пришлет сообщение.
T>Хочется сделать более надежную реализацию. Мне это видится как-то так: T>Две очереди: посланных и принятых сообщений. Функция, которая формирует из них третью очередь — пар запрос-ответ. Причем, в третьей очереди могут быть и неполные пары: запрос без ответа, и ответ без запроса.
T>Принципы спаривания сообщений: T>1) По времени. Ответ должен прийти в течение некоторого промежутка времени после отправления запроса. T>2) По смыслу. Есть функция, определяющая, может ли данное сообщение быть ответом на данный запрос.
Мне кажется, что все плохо именно из-за того, что устройство может послать сообщение "внезапно" — т.е. по сути образуется второй "обратный" поток данных.
ИМХО или делать для обратных сообщений отдельный поток данных или различать как-то "прямой" и "обратный" поток данных... Ну, например префиксами какими-то.