У меня есть устройство которое пише в сом-порт пакетную информацию. Я открываю порт CreateFile, настраиваю его как надо и далее читаю например => DWORD dwCommEvent; if(WaitCommEvent(hCom,&dwCommEvent,NULL)) { return ReadFile(hCom,lpBuffer,nNumberOfBytesToRead,lpNumberOfBytesRead,NULL); } else return 0; проблема в том что данные читаются не полностью, те часть читается остальное остаются в его буффере и при дальнейшем чтении я получаю те данные которые не прочитал сразу Код (Text): Код (Text):
Ну да, а в чем проблема? Лучше всего отвести для читалки отдельный thread и пусть складирует пакеты. Правда мой коллега вот шипит мне в ухо - мутексы, только мутексы!
Читать асинхронно, хотя бы через thread, как советует Ustus. Или настроить таймауты в порту (SetCommTimeouts) на более длительный промежуток, чтоб все данные читались сразу. Ustus Коллега не шарит.
Хорошо так и сделано отдельный поток, асинхронный режим, но есть ли в винде другие средства для работы с USB и COM кроме ReadFile. и что значит "хотя бы через thread"? Посоветуйте ссылочку или книжечку по написанию драверов UNIX -WINDOWS
//Да что может быть проще задай в структуре событие OVERLAPPED OverLapped; OverLapped.hEvent = CreateEvent(0,TRUE,0,0); //м ожидай его после чтения скок нажно ReadFile(hCom,lpBuffer,nNumberOfBytesToRead,lpNumberOfBytesRead,&OverLapped); if(WAIT_TIMEOUT == WaitForSingleObjectEx(OverLapped.hEvent,3000,FALSE)){ CloseHandle(OverLapped.hEvent); return FALSE; }