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

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

COM порт Win API. Проблемы с приёмом. [D7, WinXP]


Страницы:   1 2

PooHer ©   (2009-07-06 23:58:00) 

Умные люди, не бросьте в беде :)!
Совсем уже нет мыслей по чему такое может может произойти.
Создаю поток, в котором ожидаю приёма, но ничего не принимается (слушаю эхо). Передача проходит корректно (проверено).
procedure TComRead.Execute;
var
ComStat: TComStat;
dwMask, dwError: DWORD;
OverRead: TOverlapped;
Buf: array[0..20] of char;
dwRead: DWORD;
dd: string;
begin
FreeOnTerminate := True;
while not Terminated do
begin
dwMask:=0;
WaitCommEvent(CId, dwMask, @OverRead);
if dwMask = EV_RXCHAR then
begin
ClearCommError(CId, dwError, @ComStat);
dwRead := ComStat.cbInQue;
if dwRead > 0 then
begin
ReadFile(CId, Buf, dwRead, dwRead, @OverRead);
Form2.Panel1.Caption:=string(Buf);
end;
end; {while}
end;
end;

Всё упрощено, но по моему работать должно??


Вариант   (2009-07-07 08:01:00) [21]


> PooHer   (06.07.09 23:58)


> dwMask:=0;
> WaitCommEvent(CId, dwMask, @OverRead);

Я так понимаю, ты открыл порт указав флаг  FILE_FLAG_OVERLAPPED?
WaitCommEvent  у тебя использует OverRead и вернется не ожидая событий. Для ожидания событий надо вызвать  WaitForXXX функцию и/или GetOverlappedResult. И ты не проверяешь результат возврата WaitCommEvent (false/true + GetLastError  в случае ошибки). Может быть и ошибка, но указывающая , что идет  операция перекрытого ввода/вывода (это нормально) или другая.... И кстати, а SetCommMask ты вызывал?


KilkennyCat   (2009-07-07 03:38:00) [22]


> Германн ©

а с чего ты решил, что устройство асинхронно? только из-за протокола? Так это очень и очень спорно. Зависит от параметров синхронности. предположим, раз в год в течении суток. Что, асинхронность передачи в этом случае будет так заметна и как-то влиять?
Да и синхронность тут тоже совершенно не видна.


Германн   (2009-07-07 02:21:00) [23]


> PooHer   (07.07.09 00:17) [3]
>
>
> > И вообще, не маловат ли Buf?
>
> Передаю и принимаю 1 байт.

Уууу. Опять "идиотская" синхронная работа с асинхронным по своей сути устройством.


KilkennyCat   (2009-07-07 00:19:00) [24]

А, я подумал, что имеется ввиду передача от того, кто передает...


PooHer   (2009-07-07 00:17:00) [25]


> И вообще, не маловат ли Buf?

Передаю и принимаю 1 байт.

> И каким макаром выбран именно этот компорт, а не какой-нить
> еще, коих в системе дофига может быть? И где его инициализация?
>

Инициализация в основном потоке, я хе говорил, передача происходит корректно.
> а проконтролировать выполнение условий?

Контроль убран уже от безысходности. С ним тоже ничего не работает.


KilkennyCat   (2009-07-07 00:10:00) [26]

И вообще, не маловат ли Buf?
И не стоит ли его очищать перед приемом?
И каким макаром выбран именно этот компорт, а не какой-нить еще, коих в системе дофига может быть? И где его инициализация?


KilkennyCat   (2009-07-07 00:03:00) [27]

а проконтролировать выполнение условий?


Страницы:   1 2

Наверх

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