H
huanghuang612
Unregistered / Unconfirmed
GUEST, unregistred user!
我是将主进程中串口接收到的字符写到strlist:Tstringlist中,再另一个线程中取出strlist.Strings[0]的内容进行处理后再进行strlist.Delete(0);操作,系统运行是有时没报错,有时报“List index out of bound(0) ” ,估计是代码中未进行保护,请各位高手指点一下。
//串口接收字符
procedure TFrm_Main.Comm1RxChar(Sender: TObject;
Count: Integer);
begin
comm1.ReadStr(RecStr,Count);
strlist.Add(RecStr);
end;
//线程执行代码
procedure ReceiveThread.Execute;
var str:string;
begin
while not terminateddo
begin
if Frm_Main.strlist.Count>0 then
begin
str:= Frm_Main.strlist.Strings[0];
Frm_Main.strlist.Delete(0);
Frm_Main.ProcessRecStr(str);
end
else
begin
Frm_Main.RzStatusPane1.Caption := '二级缓存中没有数据包';
sleep(500);
end;
end;
end;
//串口接收字符
procedure TFrm_Main.Comm1RxChar(Sender: TObject;
Count: Integer);
begin
comm1.ReadStr(RecStr,Count);
strlist.Add(RecStr);
end;
//线程执行代码
procedure ReceiveThread.Execute;
var str:string;
begin
while not terminateddo
begin
if Frm_Main.strlist.Count>0 then
begin
str:= Frm_Main.strlist.Strings[0];
Frm_Main.strlist.Delete(0);
Frm_Main.ProcessRecStr(str);
end
else
begin
Frm_Main.RzStatusPane1.Caption := '二级缓存中没有数据包';
sleep(500);
end;
end;
end;