2013-11-24 9 views
0

У меня есть две программы (хост и ведомый), сообщающие через COM-порт. В простейшем случае хост отправляет команду ведомому и ждет ответа, а затем делает это снова. Но это означает, что каждая сторона должна ждать другую для каждой транзакции. Поэтому я использую очередь, поэтому вторая команда может быть отправлена ​​до возвращения первого ответа. Это ускоряет работу.Задержка задержки очереди портов порта

Но мне нужен способ измерения использования очереди, чтобы в любое время было не более N пар команд/ответов на маршруте. Например, если N равно 3, я буду ждать отправки четвертой команды, пока не получу первый ответ, и т. Д. И он должен отслеживать, какой ответ идет с какой командой.

Одна мысль, которую я имел, - пометить каждую команду целочисленным модульным счетчиком, который также возвращается с ответом. Это гарантирует, что команда и ответ всегда будут правильно спарены, и я смогу выполнить сравнение по модулю, чтобы иметь возможность подсчитывать команды всегда N перед ответами.

Что мне интересно, есть ли лучший способ? Разве это не совсем обычная вещь?

(Я использую Python, но это не важно.)

ответ

1

Используя порядковый номер и по модулю арифметика на самом деле довольно распространенным способом и признать полученные сообщения и сообщить отправителю, когда он может посылать больше сообщений - см., например, http://en.wikipedia.org/wiki/Sliding_window_protocol. К сожалению, для вас очевидным примером является TCP, необычный в том, что он использует порядковый номер, основанный на подсчете байтов, а не на подсчете сообщений, но принцип почти такой же: TCP просто обладает дополнительной степенью гибкости.

+0

спасибо. Это довольно обнадеживает. Теперь я посмотрю, смогу ли я его реализовать. – Harvey