关于线程自动停止的问题(50)

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

hnwhh

Unregistered / Unconfirmed
GUEST, unregistred user!
我同时大概开了10个线程,每个线程有个循环运行,但不知道为什么偶尔有线程自动停止了。怀疑是异常引起的,我在循环中加了try,似乎循环中没有异常,因为我在异常的时候会写日志。还有什么别的可能导致线程停止吗
 
帖你的代码看看。
 
线程execute代码 while truedo
begin
try j := selectNextJob;
if j <> nil then
begin
printJobAssign(j);
end;
except on E:Exceptiondo
begin
posLog.RecordPrintLog('循环错误',printStr+'////////////'+e.Message);
continue;
end;
end;
end;
 
你确定是停的?有没有可能是 j=nil的时候 它就什么也不做了
 
不能确定是不是线程停了,但可以肯定循环停止了。j=nil的时候,肯定继续循环了啊
 
在你这段代码里面 没有找到能证明循环停止的地方啊是不是selectNextJob里面有在外面能看到循环运行的地方或者你在 if j <> nil then
begin
printJobAssign(j);
end else
begin
//加上点东西,看下是循环停止了,还是在空循环 end;
while truedo
begin
try inc(i);
form1.FindComponent(('lable' + inttostr(k)) as Tlable).caption:=inttostr(i)////也可以先改成这样下,具体看下是线程外面的原因还是内部的原因 except on E:Exceptiondo
begin
form1.FindComponent(('lable' + inttostr(k)) as Tlable).caption:=inttostr(i) //posLog.RecordPrintLog('循环错误',printStr+'////////////'+e.Message);
continue;
end;
end;
end;
 
我在循环里加了个变量,就是每个线程都有自己的变量,就是一个时间标识,没循环一次就更新这个变量为当前时间。我在主程序中可以监视到这个变量,如果这个变量长期不动,就说明循环停止。在实际中,我就是碰到这种情况,这个变量一直停止不变了,而且其他的线程都是实时变化的
 
先注掉循环里面不重要的代码在多加上几个打Log的地方,多用几个变量具体看下是卡到什么地方
 
如果是 selectNextJob;
printJobAssign(j);出问题了,会不会导致线程停止
 
你先换成简单的语句,是有可能卡在里面的
 
另外,如果线程停止了,我手工启动Resume,能继续运行线程吗
 
有人知道吗
 
问题终于解决了,不是线程的问题,是我内部的一个socket的问题,一个连接延时设置太长,导致长时间的阻塞,以为是线程死了
 
后退
顶部