为啥我的线程不能结束!郁闷中.....(100分)

  • 主题发起人 主题发起人 chinanbzxx
  • 开始时间 开始时间
C

chinanbzxx

Unregistered / Unconfirmed
GUEST, unregistred user!
我在线程中明明用了 freeOnTerminata:=true;
但是就是结束不了!我靠
我是这样调用的
qt:=TqueryThread.create(self);
with qtdo

begin
onTerminate:=Terminateit;
resume;
end;
 
//qt:=TqueryThread.create(self);
?????????????
 
>>qt:=TqueryThread.create(self);
9494 ???????????
qt:=TqueryThread.create(Boolean值);
 
不好意思我写错了
qt:=TqueryThread.create(false);
线程放在单独一个单元!
就是不能结束!在主程序运行一下某个事件时就可以结束了,我考,郁闷!!
 
//qt:=TqueryThread.create(false);
qt:=TqueryThread.create(True);
 
chinanbzxx;
你将你的完整代码贴一下吧
 
小笨苯 你的MSN???我的MSN:NBZXX@CNNB.NET
 
qt:=TqueryThread.create(True);
传True 表示线程创建的时候被挂起,然后调用resume 唤醒线程
 
多线程要在线程内部结束,一般多线程的EXECUTE都是死循环,在循环体内加
IF TERMINATED then
EXIT
 
线程内部好像不能结束自己把
调用线程对象的destory
 
qt:=TqueryThread.create(true);
//create suspended, 否则下面的代码无效
with qtdo

begin
onTerminate:=Terminateit;
resume;
end;
 
Terminateit这个是什么变量?哪里定义的。
 
强行杀死线程:
TqueryThread.Execute;
begin
while not terminateddo
begin
//do
end;
end;
如果停止运行,在控制端执行:
qt.suspended := false;
qt.terminate;
安全结束:
private
FStopRunning: boolean;
procedure TqueryThread.StopRunning;
begin
FStopRunning := true;
end;

TqueryThread.Execute;
begin
while not FStopRunning do
begin
//do
end;
end;
在控制端调用
qt.StopRunning;
 
qt:=TqueryThread.create(true);
with qtdo

begin
onTerminate:=true;
resume;
end;
其次在TqueryThread.Excute过程中不能有无限循环或资源死锁!
 
最同意楼上的说法!
 
用api强制结束线程,但有可能会出错
 
TqueryThread.Excute过程中不能有无限循环或资源死锁的情况下,
我觉得可以这样写:
qt:=TqueryThread.create(true);
with qtdo

begin
FreeOnTerminate:=true;
onTerminate:=Terminateit;
resume;
end;
或者
在实现线程的Execute方法时这样写:
procedure TqueryThread.Execute;
begin
FreeOnTerminate:=true;
onTerminate:=Terminateit;
......
end;
调用时:qt:=TqueryThread.create(false);
 
后退
顶部