-
- У Вас нет операции ReadFile ПЕРЕД GetOverlappedResult, откуда Get'у знать, что вы читаете, а не пишете. Все операции с событиями не запускают операции ввода-вывода а устанавливают event'ы в сигнальное состояние. Для получения количества байт в Xитpый Kитaeц(35 знак., 19.03.2016 12:46)
- Я и не питал иллюзий по поводу запуска ввода-вывода событиями. Если смотреть код - я жду WaitFof Single Object потом получаю кол-во байт в буфере (почему там именно 4 вообще не понятно) и использую это число для ReadFile. Как я запущу чтение не Mebius(121 знак., 19.03.2016 17:13)
- Ещё раз, используйте ClearCommError. Если в буфере уже есть то количество байт которое нужно, асинхронная операция не нужна. Цимес асинхронщины в том, что Вы запрашиваете заранее и ожидаете доставки, копая и ковыряясь в другом месте :). - Xитpый Kитaeц(20.03.2016 08:12)
- Мне именно этот цимес и нужен. Странно что Вы это до сих пор не понимаете. Я ж писал об этом в самом первом посте. Я не знаю какое количество байт мне нужно. Мне нужны все (до паузы в передаче или конца выделенного буфера естественно). - Mebius(20.03.2016 23:43)
- Кстати да. Здесь же _явное_ ожидание завершения асинхронной операции. Обычный ReadFile вполне подошёл бы. - fk0(20.03.2016 13:04)
- Объяснять долго. Рекомендую обратиться к литературе. Твоя проблема в том, что ты не представляешь принципов работы подсистемы ввода-вывода современных ОС (она, кстати, мало чем отличается между linux и windows, принципы одни, названия функций fk0(528 знак., 19.03.2016 17:28, ссылка)
- Спасибо, почему-то не встречалась. На всякий зацепил с прилагаемыми сорцами Vit(61 знак., 20.03.2016 13:46, ссылка)
- Зачем тогда все эти SelectCommMask и WaitCommEvent? - Mebius(19.03.2016 17:36)
- Это они пытались сделать жалкое подобие интерфейса терминалов юникса. Только не факт что драйвер компорта это поддерживает. Зачем искать сложности, когда можно сделать проще? А если твой EvtChar никогда в потоке не появится, но зато будет fk0(181 знак., 19.03.2016 17:57)
- Ещё раз, используйте ClearCommError. Если в буфере уже есть то количество байт которое нужно, асинхронная операция не нужна. Цимес асинхронщины в том, что Вы запрашиваете заранее и ожидаете доставки, копая и ковыряясь в другом месте :). - Xитpый Kитaeц(20.03.2016 08:12)
- Я и не питал иллюзий по поводу запуска ввода-вывода событиями. Если смотреть код - я жду WaitFof Single Object потом получаю кол-во байт в буфере (почему там именно 4 вообще не понятно) и использую это число для ReadFile. Как я запущу чтение не Mebius(121 знак., 19.03.2016 17:13)
- У Вас нет операции ReadFile ПЕРЕД GetOverlappedResult, откуда Get'у знать, что вы читаете, а не пишете. Все операции с событиями не запускают операции ввода-вывода а устанавливают event'ы в сигнальное состояние. Для получения количества байт в Xитpый Kитaeц(35 знак., 19.03.2016 12:46)