![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Состояние буфера СОМ порта [D7, XP]
Darvin © (2009-03-18 11:06:00)Здравтвуйте!
Я работаю с СОМ портом с помощью функций CreateFile, ReadFile, WriteFile. Хотелось бы перед чтением данных из порта узнать количество байт в очереди СОМ порта. С помощью какой функции это можно сделать?
Slym (2009-03-18 18:40:00) [1]Darvin (18.03.09 14:36) [11]
псевдореального
?????????
тупо смотреть сколько в буфере? - это не реалтайм...
сирано паток будет спать, когда системе вздумается... почему бы не поспать в ожидании данных с порта?
Darvin (2009-03-18 15:06:00) [2]спасибо, буду копать
Сергей М. (2009-03-18 14:58:00) [3]см. стандартную справку по CreateFile и флагу FILE_FLAG_OVERLAPPED
Darvin (2009-03-18 14:55:00) [4]>Ну так ничто же не мешает задействовать неблокирующий асинхронный режим ввод/вывода ..
Отсюда можно подробнее, если можно ссылочку
Сергей М. (2009-03-18 14:51:00) [5]
> хотелось бы без задержек
О каких "задержках" ты говоришь ?
О блокировании вызывающего потока на время выполнения ReadFile ?
Ну так ничто же не мешает задействовать неблокирующий асинхронный режим ввод/вывода ..
Darvin (2009-03-18 14:36:00) [6]таймауты - задержки... делается система псевдореального времени... хотелось бы без задержек
Slym (2009-03-18 14:27:00) [7]а зачем?
все протоколы основаны на таймаутах ограничителях или на предвыставленной длинне ответа...
одним-единственным вызовом ReadFile- это лечение не в том месте
Darvin (2009-03-18 13:25:00) [8]да
Сергей М. (2009-03-18 13:21:00) [9]
> вычитать ответ одной процедурой чтения
В смысле одним-единственным вызовом ReadFile ?
Darvin (2009-03-18 13:09:00) [10]чтение из устройства.. запросный протокол... я должен после запроса вычитать данные... количество байт ответа может быть разным... я должен вычитать ответ одной процедурой чтения, желательно без таймаутов
Slym (2009-03-18 12:02:00) [11]Darvin (18.03.09 11:59) [5]
это средство... а цель не обозначена... может менее ректально мона сделать
Darvin (2009-03-18 11:59:00) [12]вычитать всеь буфер и при этом не висеть в таймаутах при чтении
Slym (2009-03-18 11:56:00) [13]Darvin (18.03.09 11:51) [2]
и вообще чтото не здоровое ты замыслил... Какая цель?
Slym (2009-03-18 11:55:00) [14]Darvin (18.03.09 11:51) [2]
все что в буфере прочитается без усыпления потока...
Darvin (2009-03-18 11:51:00) [15]>Slym
Получается, я перед чтением должен проверить так:
ClearCommError(HANDLE,err,Stat);
if Stat.cbInQue > N then // N - необходимое кол-во байт для чтения
ReadFile(HANDLE,Buffer, N, NRead, Nil);
И это будет прочитано без задержек на таймауты так , как N байт уже есть во входном буфере?
Slym (2009-03-18 11:42:00) [16]ClearCommError(HANDLE,err, Stat)?