判断多线程存在?(100分)

  • 主题发起人 panjigan
  • 开始时间
P

panjigan

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个进程中,如何判断并返回除主线程之外的线程在运行?
并中止他们
 
只能自己在线程中自己设置标志。
 
子线程可以分成三种
1。主线程显式创建的,这些子线程可以知道;
2。操作系统自动创建的,比如为了异步Socket操作而创建的线程,不能直接得到;
3。其它组件创建的,这些子线程也不能直接得到;
 
我在主线程中建立的线程,可能有多个线程在计算,计算结果返回给窗体,但如果我关闭该窗体后想结束那些正在运行的进程,怎么办呢?
 
一个简单的例程:
unit Unit1;
interface
uses
Windows, Classes;
TThreadA = class(TThread)
protected
procedure Execute;override;
public
constructor Create;
end;

implementation
procedure TThreadA.Execute;
begin
while not self.Terminateddo
begin
...//线程中的计算,中间也可以穿插对Terminated的判断
end;
end;

constructor TThreadA.Create;
begin
inherited Create(False);
FreeOnTerminate := True;
end;

end.

在主窗体关闭时
//TThreadA的实例化
a := TThreadA.Create;
procedure TFrmMain.FormClose(Sender: TObject;
var Action: TCloseAction) ;
begin
a.Terminate;//这样就可以了
end;
 
声明 a 为单元的局部变量,在窗体事件中将他结束掉 同上.
 
多人接受答案了。
 
顶部