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