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

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

Интересный баг с COM портом.


Страницы:   1 2

POP ©   (2008-08-20 14:43:00) 

Вычитываю инфу с порта так:


OnceAgain:

ClearCommError(PortN, Error, @ComStat);
BytesInBuffer:= ComStat.cbInQue;       // получаю кол-во байтов лежащих в буфере

Overlapped.hEvent:= CreateEvent(nil, false, false, nil);
ReadFile(PortN, buf1, BytesInBuffer, BytesRead, @Overlapped);   // Вычитываю байты из буфера в массив
if WaitForSingleObject(Overlapped.hEvent,2000) <> WAIT_OBJECT_0 then Goto EndRead;
..
..
Goto OnceAgain;


По ClearCommError получаю кол-во байтов в буфере, там лежит правильное число, то что я жду.

В WaitForSingleObject по таймату в 2 сек. не вылетаю, но после ReadFile, BytesRead = 0, то есть прочитано реально 0 байт.

После перехода "Goto OnceAgain" опять на ClearCommError, в BytesInBuffer лежит уже 0, как-будто они были прочитаны.

Порт вирутальный.

В чем может быть причина такого поведения?


brother   (2008-08-21 05:00:00) [21]

> Ты не ответил на вопрос ..

зацени ;)
The ReadFile function reads data from a file, starting at the position indicated by the file pointer. After the read operation has been completed, the file pointer is adjusted by the number of bytes actually read, unless the file handle is created with the overlapped attribute. If the file handle is created for overlapped input and output (I/O), the application must adjust the position of the file pointer after the read operation.

BOOLReadFile(

   HANDLE hFile, // handle of file to read
   LPVOID lpBuffer, // address of buffer that receives data  
   DWORD nNumberOfBytesToRead, // number of bytes to read
   LPDWORD lpNumberOfBytesRead, // address of number of bytes read
   LPOVERLAPPED lpOverlapped  // address of structure for data
  );


Сергей М.   (2008-08-20 16:43:00) [22]

Ты не ответил на вопрос ..


POP   (2008-08-20 16:38:00) [23]

А ClearCommError не ф-я разве?


Сергей М.   (2008-08-20 16:29:00) [24]

ReadFile - функция!

С какого перепугу ты используешь ее как процедуру ?


POP   (2008-08-20 16:21:00) [25]


> Как ты, спрашивается, туда попал, если "по таймату .. не
> вылетаю" ?


В этом и вопрос.

WaitForSingleObject(Overlapped.hEvent,2000) останавливается по событию, что ф-я ReadFile завершила свою работу, но после нее в BytesRead лежит 0


Сергей М.   (2008-08-20 14:46:00) [26]


> После перехода "Goto OnceAgain"


Как ты, спрашивается, туда попал, если "по таймату .. не вылетаю" ?


Страницы:   1 2

Наверх

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