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

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

COM+Я = Программа виснет ?!? [D6, WinXP]


Phantomouse ©   (2004-12-14 12:59:00) 

Странная сиуация. Вчера вечером ушел из офиса. Моя прграммка нормально работала. Сегодня утром - виснет :-(. И такое не в первый раз. В коде ничего не менял. Виснет программка при попытке читать данные из Com-порта. Вот код:


var
DCB   : TDCB;
hPort : THandle;
buffer : byte;
rp:cardinal;
ntp:cardinal;
begin
ntp:=1;
 hPort := CreateFile(PChar('COM'+IntToStr(2)),
                     GENERIC_READ + GENERIC_WRITE,
                     0, nil,
                     OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
 if hPort = INVALID_HANDLE_VALUE then begin
  Exit;
 end;
 GetCommState(hPort, DCB);
 DCB.BaudRate := 9600;
 DCB.ByteSize := 8;
 DCB.StopBits := 1;
 DCB.Parity   := 0;
 DCB.Flags := 20625;
 SetCommState(hPort, DCB);
 SetupComm(hPort, 1024, 1024);

 buffer:=00;
 WriteFile(hPort, buffer, ntp, rp, nil);

 buffer:=01;
 WriteFile(hPort, buffer, ntp, rp, nil);

 ReadFile(hPort, buffer, ntp, rp, nil);
 Memo1.Lines.Add(Char(buffer));
 
 CloseHandle(hPort);
end;


Может кто скажет в чем дело.

P.S. Ответы типа "У тя руки кривые" - не особо умное решение. Видите, что кривые руки - покажите в каком месте. Выпрямлю :-)


Phantomouse   (2004-12-14 16:29:00) [1]

С таймаутами все заработало. Прям спасибо :-)


-=SS=-   (2004-12-14 16:27:00) [2]

>>ReadFile(hPort, buffer, ntp, rp, nil);
наверняка зависает тут поскольку устройство не посылает никаких сообщений.
 Необходимо проверять буфер порта если он не пустой тогда читаем... только как это сделать на винапи незнаю... на асме всё просто :)


pavel_guzhanov   (2004-12-14 13:16:00) [3]

Да, программа ждет данных. Чтобы избежать такого "зависания", настрой таймауты. Мне это помогло...


DiamondShark   (2004-12-14 13:06:00) [4]

Никто ей ничего не присылает, вот и виснет.
На самом деле не виснет, а ждёт, пока ей чего-нибудь в порт свалится.


Наверх

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