Асинхронная работа с файлами + обработка в устройстве
Ситуация:
Есть юсб-устройство в которое надо лить файл и из которого принимаю обработанный файл(этот же). Происходит это асинхронно и параллельно(вернее конечно псевдо-параллельно . Естественно файл надо откудова-то брать и куда-то записывать обработанный. Это тоже надо делать параллельно. Весьма остро стоит проблема минимизации требуемого времени.
Функции записи пакета в устройство выглядят прибл. так: ednp1.BeginXfer(..., &overlapped); ednp1.WaitXfer(..., &overlapped); ednp1.FinishXfer(..., &overlapped); Чтения аналогично, но будет ednp2 .
Проблема:
От меня хотят непрерывный поток. Т.е. если я сделаю не на последнем пакете ednp1.WaitXfer а потом не сделаю для следующего ednp1.BeginXfer, а попытаюсь сделать ednp2.WaitXfer, в устройстве происходит сбой и у меня вылетает исключение в библиотеке устройства. Читать целиком за один раз целый файл я естественно не могу — там и гигабайтные файлы могут быть.
Т.е. система: прочел из файла кусок — стал читать второй — в это время начал отправку куска — после отправки стал записывать обработанный первый кусок в файл — вместе с записью стал читать третий — стал отправлять второй вместе с чтением третьего и т.д. крайне неудобна, если вообще осуществима имхо.
Вопрос:
Кто делал подобное, посоветуйте путь решения. Может есть у кого отлаженные и прилизанные примеры, т.к. сейчас пробую другой вариант с несколькими потоками и синхронизацией по достижению некоторого количества считанных байт и код получается жутко запутанным и тяжеловесным..?
Проект в MFC.