在delphi中如何判断线程终⽌
能不能判断线程的状态,是运⾏,还是挂起呀?怎样得知线程结束了?
我做了⼀个线程队列,⽤队列管理线程,可是⽆法得知哪个线程是否结束了,然后让结束了的线程重新启动?
Obj: TQueryThread
⽤delphi的TThread类实现
⽤什么⽅法可知线程结束了,我⽤线程句柄,有的线程结束了,但句柄不是0
请问⽤什么⽅法判断线程结束了?然后重启结束的线程
楼上的⼀些⽅法都说了,我多说⼀点
根据WIN32平台内核对象的⼀些原则
线程在仍然活动时,内核对象处于未通知状态,线程中⽌时,处于通知状态,所以可以根据线程句柄配合等待函数来做
kilometer
给你写了⼀个例⼦:随⼿写的代码,仅⽤来演⽰,实际使⽤时要注意⼀些细节。
havd 631
unit Unit1;
interface
us
Windows, Messages, SysUtils, Variants, Class, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
雅思词汇胜经
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
个人电脑的英文缩写{ Public declarations }
end;
TTestThread=class(tthread)//被测试线程,仅仅是将窗体的caption从0变到10000
protected
procedure Execute;override;
end;
猴子的英文单词
TmThread = class(tthread)//检测线程,当被侧线程中⽌时,显⽰⼀个对话款
protected
procedure Execute;override;
end;
churchvar
Form1: TForm1;lhc
overt : TTestThread;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
t := TTestThread.Create(fal);
TmThread.Create(fal);
end;
end;
{ TTestThread }
procedure TTestThread.Execute;
var
i : integer;
begin
FreeOnTerminate := true;
for i := 0 to 10000 do
Form1.Caption := Format('%d',[i]);
end;
{ TmThread }
procedure TmThread.Execute;
begin
if WaitForSingleObject(t.Handle,INFINITE)=WAIT_OBJECT_0 then
hills
ysuShowMessage('线程已经中⽌');
end;
end.
delphi 线程作了封装哦, 不但可以在 windows 平台下跑, 也能在 linux 下跑的, 好的代码不要去⽤ API, TThread 本⾝封装了些属性, 这样装了 crossKyrix 后, 可以直接编译成 linux 运⾏⽂件
property Suspended 暂停
property Terminated 中⽌
function WaitFor 阻塞等线程结束, 代替 WaitForSingleObject, 返回结果是相同的
看到前⾯提到 FreeOnTerminate 应⼩注意⼀下, 这种线程是不受控的, ⼀般是那种暂态的, 做完后不需去了解状态的线程, FreeOnTerminate = true 时, 线程属性是不应该去访问的,在建⽴时设什么就是什么, 因为线程随时可能被释放, 因此极难作收集管理⽤