Hello, EandG!
You wrote on Tue, 25 Nov 2003 17:18:49 GMT:
E> Абсолютно верное замечание — параметров конечно 5 — код такой
E> WriteFile(port, ask, dwToWrite, &dwWritten, NULL);
E> ReadFile(port, reply, expectLengthOfLine, &dwRead, NULL);
Ну так что с dwRead дальше делаешь? Всегда ли оно совпадает с expectLengthOfLine?
E> а проект могу хоть весь прислать
Не надо.
E> — там вначале письма еще опечатка — послед. порт а паралелльный —
Насчет параллельного не понял.
S>> Можно, но вряд ли необходимо.
E> если знаете как, то если это долго рассказывать то я готов хоть
Ну там просто вариантов возможна целая куча.
E> позвонить потому что когда то была похожая проблема с сокетами и после
E> использования асинхронных сокетов все проблемы исчезли
Да примерно так же, как с сокетами. Наверно проще всего будет так — запускаешь отдельный поток, делаешь в нем буфер на 12 байт (или какая там у тебя длина посылки), пишешь полученные байты в буфер, как буфер заполнился — декодируешь ответ и передаешь его главному потоку. Если посылки переменной длины, буфер удобнее всего делать кольцевой. Количество байт, доступных для чтения, берешь не из expectLengthOfLine, а смотришь, сколько байт сидят во входной очереди с помощью ClearCommError и ровно столько читаешь (не помню, почему я именно так делал — но работало безупречно).
E> но если можете подсказать и решение без "асинхронности" то
E> признательность будет не меньшей — пока не понятен даже механизм почему
E> пропадают байты при приеме и особенно часто первый байт — если на компе
E> вертится что то еще особенно лазаине по инет
E> Прога работает сутками если она на компе одна — но если полазить вовремя
E> ее работы по инет то заставить прогу потерять байты при приеме можно за
E> минуту
Ну пока предположение такое — dwRead возвращает меньше, чем expectLengthOfLine, поскольку на загруженной машине посылки начинают приходить кусками. Ну и ошибки всяческие проверять не помешает — перед каждым чтением и записью в порт. При frame error порт закрыть/открыть.
Best regards,
Sergey.
Posted via RSDN NNTP Server 1.8 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.