![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Интересный баг с COM портом.
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"
Как ты, спрашивается, туда попал, если "по таймату .. не вылетаю" ?