Чтобы получить хорошую пропускную способность чтения в Windows по USB, вам обычно нужно иметь несколько асинхронных операций чтения (или очень больших операций чтения, что часто менее удобно), помещенных в очередь в стек USB-устройств. Я не совсем уверен, что драйверы / библиотеки FTDI делают внутренне в этом отношении.
Традиционно я написал механизмы с массивом структур OVERLAPPED и массивом буферов и продолжал перетаскивать их в ReadFile, как только они освобождались. Примерно 5-6 лет назад я выполнял чтение со скоростью 40 МБ / с на USB2, поэтому современные ПК, безусловно, должны справляться.
Очень важно, чтобы вы (или ваши драйверы / библиотеки) не попали в цикл «начать чтение, закончить чтение, разобраться с данными, начать другое чтение», потому что вы обнаружите, что шина простоя на обширные промежутки времени. Анализатор USB покажет вам, если это происходит.
Я согласен с остальными в том, что вы должны выйти из потока, что чтение происходит как можно скорее - не блокируйте обработчик событий FTDI дольше, чем при попытке поместить буфер в другую очередь.
Я бы заранее выделил кольцевую очередь буферов, выбрал следующую свободную и выбросил в нее полученные данные, а затем завершил обработку событий как можно быстрее.
Все эти контрольные суммы и конкатенации с выделением сопутствующей памяти, сборкой мусора и т. Д. Могут выполняться на другой стороне потенциально 100-мегабайтного пространства буфера времени / пространства на ПК. На данный момент вы вполне можете просить ваш FPGA / аппаратный буфер учесть время, затрачиваемое на выполнение всяких громоздких вещей на ПК, что можно сделать гораздо позже.
Хотя я настроен оптимистично - если вы действительно можете буферизовать 100 мс данных на оборудовании, вы должны быть в состоянии обеспечить надежную работу. Хотел бы я убедить всех своих клиентов позволить так много ...