Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Состояние буфера СОМ порта [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)?


Наверх

Титульная страница Поиск, карта сайта Написать письмо