Форум: "WinAPI";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
ВнизCOM+Я = Программа виснет ?!? Найти похожие ветки
← →
Phantomouse © (2004-12-14 12:59) [0]Странная сиуация. Вчера вечером ушел из офиса. Моя прграммка нормально работала. Сегодня утром - виснет :-(. И такое не в первый раз. В коде ничего не менял. Виснет программка при попытке читать данные из 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. Ответы типа "У тя руки кривые" - не особо умное решение. Видите, что кривые руки - покажите в каком месте. Выпрямлю :-)
← →
DiamondShark © (2004-12-14 13:06) [1]Никто ей ничего не присылает, вот и виснет.
На самом деле не виснет, а ждёт, пока ей чего-нибудь в порт свалится.
← →
pavel_guzhanov (2004-12-14 13:16) [2]Да, программа ждет данных. Чтобы избежать такого "зависания", настрой таймауты. Мне это помогло...
← →
-=SS=- © (2004-12-14 16:27) [3]>>ReadFile(hPort, buffer, ntp, rp, nil);
наверняка зависает тут поскольку устройство не посылает никаких сообщений.
Необходимо проверять буфер порта если он не пустой тогда читаем... только как это сделать на винапи незнаю... на асме всё просто :)
← →
Phantomouse © (2004-12-14 16:29) [4]С таймаутами все заработало. Прям спасибо :-)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.039 c