我是将每条记录的相关信息取出,按下列代码发送出去,
下列代码重复执行22次时,程序无响应,等很长时间后,有可受到两三个字节
代码如下:
comm1.baudrate :=2400;
comm1.commname :='com1';
Comm1.StartComm; } for k:=1 to 2 do
begin
if gate[k]= '' then
goto 22;
begin
SendBuf1[3] := strtoint(gate[k]) +5; // 登机门号,排在五个值机柜台之后
sleep(3);
for i:=1 to 38 do
begin Comm1.WriteCommData(@Sendbuf1[i],1);
sleep(3);
end;
end ;
//showmessage(gate[k] +'登机门' + s);
end;
22: //Comm1.StopComm;
下列代码重复执行22次时,程序无响应,等很长时间后,有可受到两三个字节
代码如下:
comm1.baudrate :=2400;
comm1.commname :='com1';
Comm1.StartComm; } for k:=1 to 2 do
begin
if gate[k]= '' then
goto 22;
begin
SendBuf1[3] := strtoint(gate[k]) +5; // 登机门号,排在五个值机柜台之后
sleep(3);
for i:=1 to 38 do
begin Comm1.WriteCommData(@Sendbuf1[i],1);
sleep(3);
end;
end ;
//showmessage(gate[k] +'登机门' + s);
end;
22: //Comm1.StopComm;
下列代码重复执行22次时,程序无响应,等很长时间后,有可受到两三个字节
代码如下:
comm1.baudrate :=2400;
comm1.commname :='com1';
Comm1.StartComm; for k:=1 to 4 do
begin
if gate[k]= '' then //gate[]共有4个元素,if gate[i]无数据 then 退出发送代码
goto 22;
begin
SendBuf1[3] := strtoint(gate[k]) +5; //
sleep(3);
for i:=1 to 38 do
begin
Comm1.WriteCommData(@Sendbuf1[i],1);
sleep(3);
end;
end ;
end;
22: Comm1.StopComm;
comm1.baudrate :=2400;
comm1.commname :='com1';
Comm1.StartComm; for k:=1 to 4 do
begin
if gate[k]<>'' then //gate[]共有4个元素,if gate[i]无数据 then 退出发送代码
begin
SendBuf1[3] := strtoint(gate[k]) +5; //
sleep(3);
for i:=1 to 38 do
begin
Comm1.WriteCommData(@Sendbuf1[i],1);
sleep(3);
end ;
end
end;
Comm1.StopComm;
在输出的循环中加入
StartTime := now;
repeat
Application.ProcessMessages;
until Now > StartTime + NumSec * (1/24/60/60);变量声明:
NumSec: SmallInt;
StartTime: Tdatetime;
直接运行可执行文件,能发送23组,第24组数据只收到7个字节,而最后一组数据都是一样的,我只是在中间增加几组数据。还有,delphi6跑程序时,为发送完时,机子就死掉;而运行可执行文件时,虽然未发送完,但机子却未曾死掉。似乎米奇(先生或小姐,大半是先生)说的有理,
但他却不来详细解释一下他的代码,
StartTime := now;
repeat
Application.ProcessMessages;
until Now > StartTime + 1;
调试时,
starttime=37424.701862
但总是不能跳出repeat循环,
我的写法是否正确??还是其他原因??
你要等到第二天才能退出循环。
Tdatatime的整数单位为天,这就是我在后面乘上(1/24/60/60)的原因。
结果为秒。
感谢你的帮助,我已经改好了。
而且,发送速度也有很大提高!!!
同时,也感谢其他网友的大力协助和gz!!!