急急急~~~~~线程为什么会死掉???(50分)

  • 主题发起人 主题发起人 lcl_003
  • 开始时间 开始时间
把not terminated设为一个标志为
Received: Boolean;
然后控制标志位 while Receiveddo
 
我想这个办法应该没有问题,注意标志位都应该在你的主线程里设置。
 
troyliu, 我控制标志位有什么用呢?我要执行循环啊,要标志位有啥用?
 
那就用 while Truedo
 
标志位可以控制是否进行通讯。你可以人工控制,还是不错的
 
哦,就是说到500ms我控制线程让它通讯,是这个意思吗?但是这与线程死掉有关系吗?
用sleep不也行吗?
 
一个线程死掉有很多原因,线程阻塞,现成冲突,还是不容易判断的。
我这有一个经典的通讯程序,你要不要。
 
好好,2000se#sina.com
troyliu,上qq聊聊?33847540
 
哥们,我公司把QQ的端口给封了,
用msn吧。troyliu@msn.com
 
哦,你不在线啊。例子你还没给我发呢吧?
 
画线的代码贴出来看看
 
recv401是接收回来的数组
procedure Tchartview.Timer1Timer(Sender: TObject);
var
j,i: integer;
begin
if combobox1.Text <> '' then
tmp := selectchan(StrToInt(combobox1.Text));
if (strtoint(combobox1.Text)>0) and (strtoint(combobox1.Text)<=16) then
if chartflag[1]=1 then
for j := 0 to 49do
begin
valcom1[1, j] := (recv401[j * 96 + 497 + (tmp.a - 1) * 6] * 256 +
recv401[j * 96 + 496 + (tmp.a - 1) * 6]);
series1.Add(valcom1[1, j]);
valload1[1, j] := (recv401[j * 96 + 499 + (tmp.a - 1) * 6] *
256 + recv401[j * 96 + 498 + (tmp.a - 1) * 6]);
series2.Add(valload1[1, j]);
valdis1[1, j] := (recv401[j * 96 + 501 + (tmp.a - 1) * 6] *
256 + recv401[j * 96 + 500 + (tmp.a - 1) * 6]);
series3.Add(valdis1[1, j]);
chartflag[1]:=0;
if chartview1 <> nil then
for i := 0 to high(chartview1)do
if (strtoint(chartview1.ComboBox1.Text)>0) and (strtoint(chartview1.ComboBox1.Text)<=16) then
chartflag[1]:=1
else
chartflag[1]:=0;
end;
if series1.Count > 2000 then
series1.clear;
timer1.Enabled := False;
end;
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1633486
 
troyliu兄阿,能不能给小弟也发一份这个例子那
谢谢谢谢
wldandan@163.com
 
抗议~~~~~~~~~~~~~wldandan, 抢地盘:(
 
怀疑你线程并没有死,可能有资源占用没有释放,以致反应时间越来越长,使你以为线程死了。
查一下有什么东西没有释放干净。
 
好东东,请看http://lui2008.8u8.com
 
此类问题与资源没释放无关,主要是线程死锁!你跟踪CPU会发现线成在等一个事件!
所以我猜想问题在与你的DoSomething,在其中你直接访问了TChart,没有进行临界区
处理,运行很长时间没有问题时由于恰巧你修改TChart的数据和See TChart没有访问
冲突,但是比表明永远不会冲突!
 
多人接受答案了。
 
后退
顶部