Доброго времени суток.
У меня в потоке все время должен вращаться опрос 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 ;
...
|
|