Przyjmiemy takie wartości:
- urządzenie odbierające dane powierdza po otrzymaniu danych bajtem 100 (to działa poprawnie nie wiesza się)
Problem mam z tym kawałkiem kodu, ponieważ aplikacja wysyłając ramki (mam podgląd przez StaticText) i im większa liczba tym bardziej spowalnia transmisja aż uzyskam np warość 4892 i stoi w miejsciu np przez 3-4min i kolejna ramka i znowu na zmiane wartości Ramki widze po długim czasie
Ogólnie mam odczucie jak by coś się w tym kodzie "zapychało"
Ramka:=1;
repeat
repeat
WriteCOM (BufforOUT);
repeat
until ReadCOM(BufforIN) = True;
until BufforIN = 100; //potwierdzenie od urządzenia że odebrał poprawnie ramkę danych
Inc (Ramka);
StaticText1.Caption:=IntToStr (Ramka); //podgląd ile się wysłało
until Ramka = 5000;
Tak wyglądają pełne funkcje Write i Read, może tu coś zapycha aplikacje?
//---------------------------------------------------------
function TForm2.Write_Comm(hCommDev: THANDLE; lpBuffer: PChar;
nNumberOfBytesToWrite: DWORD): BOOL;
var
NumberOfBytesWritten : DWORD;
begin
WriteFile(hCommDev, Buffer_O, nNumberOfBytesToWrite,
NumberOfBytesWritten, NIL);
Result := WaitCommEvent(hCommDev, fdwEvtMask, NIL);
end;
//---------------------------------------------------------
function TForm2.Read_Comm(hCommDev: THANDLE;
Buf_Size: DWORD): BOOL;
var
nNumberOfBytesToRead: DWORD;
begin
Result := FALSE;
ClearCommError(hCommDev, Errors, @Stat);
if (Stat.cbInQue > 0) then
begin
if (Stat.cbInQue > Buf_Size) then
nNumberOfBytesToRead := Buf_Size
else
nNumberOfBytesToRead := Stat.cbInQue;
Result := ReadFile(hCommDev, Buffer_I,
nNumberOfBytesToRead,
Number_Bytes_Read, NIL);
end;
end;