不可能。不知道你的接收是怎么处理的;类似这样的过程吧: var start:cadinal;sendDataToComPort; start:=gettickcount; while gettickcount-start<1500 do begin //wait for rece the data application.processmesages;//这一句重要! //这儿肯定可以收到数据的 end;
谢谢: 这是一段发送原码: commflg:=true; returncount:=0; addflag:=false; flag:=false; dataline:=memo1.lines.Count; if dataline<=0 then exit; // ―羆Ω计everyline㎝讽Ω掸计 zhen:=floor(dataline/20); yu:= dataline-zhen*20 ; everyline:=1; while everyline<=zhen do begin for i:=1 to 256 do buf16[i]:=$00; buf16[1]:=$+(strtoint(cbx2.text)); buf16[2]:=$+(strtoint('161')); buf16[3]:=$21; for nowline:=0+(everyline-1)*20 to everyline*20-1 do begin datastr:=memo1.lines[nowline]; datastr:=inttohex(strtoint64(datastr),4); while length(datastr)<8 do datastr:='0'+datastr; buf16[(nowline-(everyline-1)*20)*8+4]:=strtoint('$'+copy(datastr,1,2)); buf16[(nowline-(everyline-1)*20)*8+5]:=strtoint('$'+copy(datastr,3,2)); buf16[(nowline-(everyline-1)*20)*8+6]:=strtoint('$'+copy(datastr,5,2)); buf16[(nowline-(everyline-1)*20)*8+7]:=strtoint('$'+copy(datastr,7,2)); buf16[(nowline-(everyline-1)*20)*8+8]:=$FF; buf16[(nowline-(everyline-1)*20)*8+9]:=$FF; buf16[(nowline-(everyline-1)*20)*8+10]:=$FF; buf16[(nowline-(everyline-1)*20)*8+11]:=$FF; end; buf16[19*8+12]:=$FF; buf16[19*8+13]:=$Ff; for i:=1 to 20*8+3+2 do begin if not fcomm.comm1.WriteCommData(@buf16[i],1) then begin commflg:=false; break; end; sleep(1); end; prirtime:=now; while 1=1 do //但在这段单步执行中永远不会去执行ReceiveData过程.不明白.感觉不能多线程. begin if addflag then //addflag:在接收到数据时ReceiveData里如果收到数据就置为true;, begin returncount:=returncount+20; break; end; // comm1.readbuffer; nowtime:=now; // sleep(100); if ((nowtime-prirtime)*24*3600)>20 then begin messagedlg('send error!',mterror,[mbyes],0); exit; end; end; if not commflg then messagedlg('send error!',mterror,[mbyes],0); everyline:=everyline+1; end; if yu>0 then begin for i:=1 to 256 do buf16[i]:=$00; buf16[1]:=$+(strtoint(cbx2.text)); buf16[2]:=$+(strtoint(inttostr(yu*8+1))); buf16[3]:=$21; for nowline:=0+(zhen)*20 to zhen*20+yu-1 do begin datastr:=memo1.lines[nowline]; datastr:=inttohex(strtoint64(datastr),4); while length(datastr)<8 do datastr:='0'+datastr; buf16[(nowline-(everyline-1)*20)*8+4]:=strtoint('$'+copy(datastr,1,2)); buf16[(nowline-(everyline-1)*20)*8+5]:=strtoint('$'+copy(datastr,3,2)); buf16[(nowline-(everyline-1)*20)*8+6]:=strtoint('$'+copy(datastr,5,2)); buf16[(nowline-(everyline-1)*20)*8+7]:=strtoint('$'+copy(datastr,7,2)); buf16[(nowline-(everyline-1)*20)*8+8]:=$FF; buf16[(nowline-(everyline-1)*20)*8+9]:=$FF; buf16[(nowline-(everyline-1)*20)*8+10]:=$FF; buf16[(nowline-(everyline-1)*20)*8+11]:=$FF; end; buf16[(yu-1)*8+12]:=$FF; buf16[(yu-1)*8+13]:=$Ff; for i:=1 to yu*8+3+2 do begin if not fcomm.comm1.WriteCommData(@buf16[i],1) then begin commflg:=false; break; end; sleep(2); end; prirtime:=now; while 1=1 do begin nowtime:=now; sleep(100); if ((nowtime-prirtime)*24*3600)>3 then begin messagedlg('send error!',mterror,[mbyes],0); exit; end; if addflag then begin returncount:=returncount+20; break; end; end; showmessage('add employee information count=('+inttostr(returncount)+')'); if not commflg then messagedlg('send error!',mterror,[mbyes],0); everyline:=everyline+1; end;
var
start:cadinal;sendDataToComPort;
start:=gettickcount;
while gettickcount-start<1500 do
begin
//wait for rece the data
application.processmesages;//这一句重要!
//这儿肯定可以收到数据的
end;
这是一段发送原码:
commflg:=true;
returncount:=0;
addflag:=false;
flag:=false;
dataline:=memo1.lines.Count;
if dataline<=0 then exit;
// ―羆Ω计everyline㎝讽Ω掸计
zhen:=floor(dataline/20);
yu:= dataline-zhen*20 ;
everyline:=1; while everyline<=zhen do
begin for i:=1 to 256 do buf16[i]:=$00;
buf16[1]:=$+(strtoint(cbx2.text));
buf16[2]:=$+(strtoint('161'));
buf16[3]:=$21;
for nowline:=0+(everyline-1)*20 to everyline*20-1 do
begin
datastr:=memo1.lines[nowline];
datastr:=inttohex(strtoint64(datastr),4);
while length(datastr)<8 do datastr:='0'+datastr;
buf16[(nowline-(everyline-1)*20)*8+4]:=strtoint('$'+copy(datastr,1,2));
buf16[(nowline-(everyline-1)*20)*8+5]:=strtoint('$'+copy(datastr,3,2));
buf16[(nowline-(everyline-1)*20)*8+6]:=strtoint('$'+copy(datastr,5,2));
buf16[(nowline-(everyline-1)*20)*8+7]:=strtoint('$'+copy(datastr,7,2));
buf16[(nowline-(everyline-1)*20)*8+8]:=$FF;
buf16[(nowline-(everyline-1)*20)*8+9]:=$FF;
buf16[(nowline-(everyline-1)*20)*8+10]:=$FF;
buf16[(nowline-(everyline-1)*20)*8+11]:=$FF;
end;
buf16[19*8+12]:=$FF;
buf16[19*8+13]:=$Ff;
for i:=1 to 20*8+3+2 do
begin
if not fcomm.comm1.WriteCommData(@buf16[i],1) then
begin
commflg:=false;
break;
end;
sleep(1);
end; prirtime:=now;
while 1=1 do //但在这段单步执行中永远不会去执行ReceiveData过程.不明白.感觉不能多线程.
begin
if addflag then //addflag:在接收到数据时ReceiveData里如果收到数据就置为true;,
begin
returncount:=returncount+20;
break;
end;
// comm1.readbuffer;
nowtime:=now;
// sleep(100);
if ((nowtime-prirtime)*24*3600)>20 then
begin
messagedlg('send error!',mterror,[mbyes],0);
exit;
end;
end; if not commflg then messagedlg('send error!',mterror,[mbyes],0);
everyline:=everyline+1;
end; if yu>0 then
begin
for i:=1 to 256 do buf16[i]:=$00;
buf16[1]:=$+(strtoint(cbx2.text));
buf16[2]:=$+(strtoint(inttostr(yu*8+1)));
buf16[3]:=$21;
for nowline:=0+(zhen)*20 to zhen*20+yu-1 do
begin
datastr:=memo1.lines[nowline];
datastr:=inttohex(strtoint64(datastr),4);
while length(datastr)<8 do datastr:='0'+datastr;
buf16[(nowline-(everyline-1)*20)*8+4]:=strtoint('$'+copy(datastr,1,2));
buf16[(nowline-(everyline-1)*20)*8+5]:=strtoint('$'+copy(datastr,3,2));
buf16[(nowline-(everyline-1)*20)*8+6]:=strtoint('$'+copy(datastr,5,2));
buf16[(nowline-(everyline-1)*20)*8+7]:=strtoint('$'+copy(datastr,7,2));
buf16[(nowline-(everyline-1)*20)*8+8]:=$FF;
buf16[(nowline-(everyline-1)*20)*8+9]:=$FF;
buf16[(nowline-(everyline-1)*20)*8+10]:=$FF;
buf16[(nowline-(everyline-1)*20)*8+11]:=$FF;
end;
buf16[(yu-1)*8+12]:=$FF;
buf16[(yu-1)*8+13]:=$Ff;
for i:=1 to yu*8+3+2 do
begin
if not fcomm.comm1.WriteCommData(@buf16[i],1) then
begin
commflg:=false;
break;
end;
sleep(2);
end; prirtime:=now;
while 1=1 do
begin
nowtime:=now;
sleep(100);
if ((nowtime-prirtime)*24*3600)>3 then
begin
messagedlg('send error!',mterror,[mbyes],0);
exit;
end;
if addflag then
begin
returncount:=returncount+20;
break;
end;
end;
showmessage('add employee information count=('+inttostr(returncount)+')'); if not commflg then messagedlg('send error!',mterror,[mbyes],0);
everyline:=everyline+1;
end;
好了,确实是这句.后来有看这句,在等待消息.
谢