Вы хотите Решето Atkin, описанного здесь: http://en.wikipedia.org/wiki/Sieve_of_Atkin
Вам может потребоваться несколько потоков и / или асинхронных операций. Раньше при последовательной связи (не в .NET) мы ставили в очередь чтение порта (ов). Когда чтение завершится, сработает функция обратного вызова (делегат), будет выполнена обработка чтения, потенциально изменив состояние управления - нашим типичным примером было считывание штрих-кода при одновременном считывании с клавиатуры и таймера. Одно из событий завершится, что вызовет действие (потенциально оставив другие операции чтения в очереди на месте или отменив их, в зависимости от того, в какое состояние переходило состояние).
Возможно, вы захотите изучить использование конечного автомата (ов) . В этом случае конечный автомат знает, какие операции выполняются, какие переходы разрешены и как переходить между ними, и какие действия вызывают переходы.
это предел работы многоточечных последовательных сетей ..... в этом нет никакого волшебства, вы можете немного облегчить боль
Как правило, лучший подход - вставить уровень абстракции, где у вас есть очередь сообщений, которые вы хотите отправить, и у каждого из них есть обратный вызов, который вызывается при получении ответа.
Я работаю в Zaber Technologies , и я создал управляющую библиотеку для наших контроллеров точных шаговых двигателей, которые обмениваются данными через последовательное соединение с последовательной цепью. Я использовал три уровня:
Многие устройства изменяют свой последовательный порт. Существуют устройства, связь которых не может работать должным образом при чтении строки с указанной скоростью передачи.
Я считаю, что мне нужно определить параметры связи устройства. Есть производители, у которых характеристики связи двух устройств одной модели различаются. Характеристика - дело довольно утомительное. Определение характеристик включает в себя обнаружение различных комбинаций ситуаций и затем обдумывание возможностей.
Наихудший сценарий - это увеличение количества состояний / комбинаций возможностей, влияющих на чистоту операций чтения / записи, и вы уменьшаете количество состояний, скомпрометировав использование самого медленного общего знаменателя среди групп операций чтения / записи. За всем этим должна стоять наука, но я просто стараюсь изо всех сил стараться изо всех сил, используя тестирование методом грубой силы.
Что, конечно, привело бы к созданию уровня чтения / записи, отделяющего подпрограммы, требующие связи, от прямого взаимодействия с портом.
1286] В качестве альтернативы мы все знаем, что быстрый и ленивый, но неэффективный способ - вставлять 10 мсек после каждого байта.
Наихудший сценарий - это увеличение количества состояний / комбинаций возможностей, влияющих на чистоту операций чтения / записи, и вы уменьшаете количество состояний за счет использования самого медленного общего знаменателя среди групп операций чтения / записи. За всем этим должна стоять наука, но я просто стараюсь изо всех сил стараться изо всех сил, используя тестирование грубой силы.
Что, конечно же, привело бы к созданию уровня чтения / записи, отделяющего подпрограммы, требующие связи, от прямого взаимодействия с портом.
1286] В качестве альтернативы мы все знаем, что быстрый и ленивый, но неэффективный способ - вставлять 10 мсек после каждого байта.
Наихудший сценарий - это увеличение количества состояний / комбинаций возможностей, влияющих на чистоту операций чтения / записи, и вы уменьшаете количество состояний за счет использования самого медленного общего знаменателя среди групп операций чтения / записи. За всем этим должна стоять наука, но я просто стараюсь изо всех сил стараться изо всех сил, используя тестирование грубой силы.
Что, конечно же, привело бы к созданию уровня чтения / записи, отделяющего подпрограммы, требующие связи, от прямого взаимодействия с портом.
1286] В качестве альтернативы мы все знаем, что быстрый и ленивый, но неэффективный способ - вставлять 10 мсек после каждого байта.