怎样判断一个线程是否正在运行?(100分)

  • 主题发起人 主题发起人 Flying_zyz
  • 开始时间 开始时间
F

Flying_zyz

Unregistered / Unconfirmed
GUEST, unregistred user!
var
thread:TMyThread;//线程全局变量
//我在一个按钮中激活了上面的那个线程,如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
thread:=TMyThread.Create(false);
end;

//现在我点击另外一个按钮,目的是想查看刚才那个线程是否已经正在运行中
procedure TForm1.Button2Click(Sender: TObject);
begin
这里判断刚才那个线程是否在运行中,如果是,则Suspend它,如果是挂起的,则Resume它。请问应该怎么实现?
end;
 
帮助中很明白啊,就是suspended属性,boolean类型
Suspended property:Indicates whether a thread is suspended.
 
楼上那只能判断是否挂起吧,没有挂起并不代表正在运行啊?有可能已经结束了
可以定义一个函数ThreadDone
procedure ThreadDone;
begin
showmessage('The MyThread hasdo
ne');
end;
constructor TMyThread.create;
begin
inherited create(false);
onterminate := ThreateDone;//线程结束时执行
freeonterminate := true;
end;
试试,如果只有一个线程,是在一个线程结束后执行,如果有多个线程,你可以在ThreadDone中用个标志,标志你所要判断的线程结束后再执行
 
如果你想知道它是否结束了
可以挂接该线程的Onterminate事件
这样只要线程结束了运行
你会产生些事件通知你的程序
 
对,线程结束时发个通知.比如你在某个单元里定义一个记录某线程是否结束的布尔变量,线程结束时置为真就可以知道了.
 
//判断线程是否释放
//作者: muhx
//时间: 2004-12
//返回值:0-已释放;1-正在运行;2-已终止但未释放;
//3-未建立或不存在
function TFrmMain.CheckThreadFreed(aThread: TThread): Byte;
var
i: DWord;
IsQuit: Boolean;
begin
if Assigned(aThread) then
begin
IsQuit := GetExitCodeThread(aThread.Handle, i);
if IsQuit then
//If the function succeeds, the return value is nonzero.
//If the function fails, the return value is zero.
begin
if i = STILL_ACTIVE then
//If the specified thread has not terminated,
//the termination status returned is STILL_ACTIVE.
Result := 1
else
Result := 2;
//aThread未Free,因为Tthread.Destroy中有执行语句
end
else
Result := 0;
//可以用GetLastError取得错误代码
end
else
Result := 3;
end;
 
多人接受答案了。
 
后退
顶部