各位,已经很多天了都没搞定,帮帮忙吧 ( 积分: 15 )

  • 主题发起人 主题发起人 huanghuang612
  • 开始时间 开始时间
H

huanghuang612

Unregistered / Unconfirmed
GUEST, unregistred user!
//主程序中串口接收字符,其中strlist为TStringlist
procedure TFrm_Main.Comm1RxChar(Sender: TObject;
Count: Integer);
var str:string;
begin
comm1.ReadStr(Str,Count);
EnterCriticalSection(cs1);
try
strlist.Add(Str);
except
showmessage('添加缓存出错:');
end;
LeaveCriticalSection(cs1);
end;

//线程执行代码
procedure ReceiveThread.Execute;
var str:string;
i:integer;
begin
i:=0;
while not terminateddo
begin
if Frm_Main.strlist.Count>0 then
begin
try
i:=Frm_Main.strlist.Count;
str:= Frm_Main.strlist.Strings[0];
Frm_Main.strlist.Delete(0);
Frm_Main.RzStatusPane1.Caption := inttostr(i);
except
Frm_Main.RzStatusPane1.Caption := '缓存中的行数为:'+inttostr(i);
end;
Frm_Main.ProcessRecStr(str);
end
else
begin
try
i:=Frm_Main.strlist.Count;
Frm_Main.RzStatusPane1.Caption := inttostr(i);
sleep(500);
except
Frm_Main.RzStatusPane1.Caption := '缓存中的行数为0';
end;
end;
end;
end;

现在系统提示的错误是“添加缓存出错”。
系统中只在这两段代码中有strlist变量
 
使用TStrings、TStringlist的对象前要执行Create操作
在适当的地方加上strlist:=TStringlist.Create();吧。
当不用的时候记得加上strlist.Free;
 
没有问题才怪,线程中怎能直接和mainform的vcl交互呢
(Frm_Main.RzStatusPane1.Caption := '缓存中的行数为:'+inttostr(i);)?
应该用sychronize,另外为何要mainForm.strlist这样呢? 何不直接该strlist为全局变量?
 
后退
顶部