...
{ **** Přečtení dat z impu do stringu ****}
rx:='';
if i < 10 then povel:='I_SR0' + inttostr(i) + '0080' else povel:='I_SR' + inttostr(i) + '0080';
frmmain.comport1.WriteStr(povel + #13);
sleep(100);
endtime:=time+0.1/(24*60*60);
repeat
application.ProcessMessages;
until ((time)>endtime) or (length(rx)=167);
...
pokud tam v té smyčce application.ProcessMessages nedám, data z portu tam nepřijdou.
Ano, to dela to aktivni cekani
repeat-until. Tak se mozna programovalo v DOSu, ale ne v event driven prostredi. Tam zadne
sleep ani cekaci smycky nemaji co delat: V dobe cekani ma bezet pumpa zprav a tvoje aplikace ma obsluhovat eventy, ktere posila. Nad tim sleep(100) by se dalo zavrit oko, ale na tim
repeat-until ne.
Ty to musis invertovat tj. misto
repeat-until nastartovat timer s timeoutem, ktery kdyz by ticknul, tak by ses choval jako pri prekorceni casu a naopak pri obsluze
RxChar bys sis prijmal znaky a kdyz bys je mel vsechny, tak bys ten timer zastavil a ty prijate znaky co nejrychleji zpracoval ev. obslouzil to zarizeni, pokud je to treba. Tim by ti za na to zpracovani jela porad pumpa zprav a nikde bys zadne ProcessMessages nepotreboval.