Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Зависает приложение при чтении с COM порта


Автор: limarukraine 13.2.2021, 12:03
Доброго времени суток.

У меня в потоке все время должен вращаться опрос COM порта - если что-то появилось - она принимается. Ниже приведен код (фрагменты).  У меня упорно зависает приложение на строке ReadFile (я это проверил средствами вывода сообщения в окно). Порт у меня виртуальный (пара виртуальных портов). Если я удаляю виртуальный порт приложение не зависает. Причем раньше у меня приложение работало и вдруг возникла эта проблема.

Код
...

DCB   : TDCB;
  PortHandle1: THandle;

...

...

PortHandle1:= CreateFile('COM2', GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
//  if PortHandle1 = INVALID_HANDLE_VALUE then begin
 // exit;
//  end;
  if GetCommState(PortHandle1, DCB) then ;
  DCB.BaudRate := 9600;
  DCB.ByteSize := 8;
  DCB.Parity := NOPARITY;
  DCB.StopBits := ONESTOPBIT;
  DCB.Flags := 20625;
  if not SetCommState(PortHandle1, DCB) then {ошибка настройки порта};
  if not SetupComm(PortHandle1, 1024, 1024) then {ошибка настройки буферов};
  if PurgeComm(PortHandle1, PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR) then ;

...

MyBuff: array[0..1023] of char; //буфер для чтения данных

  ByteReaded: Cardinal; //количество считанных байт

 Status: DWord;
...

begin

 if GetCommModemStatus(PortHandle1, Status) then ;

  if  ReadFile(PortHandle1, MyBuff, SizeOf(MyBuff), ByteReaded, nil) then ;

...


Автор: Romikgy 13.2.2021, 13:07
таймауты кто настраивать будет ?

PS вы случаем не из автомастерской limar из  Одессы?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)