delphi判断线程状态函数

来源:https://www.cnblogs.com/azhqiang/p/3955490.html

//判断线程是否释放

//返回值:0-已释放;1-正在运行;2-已终止但未释放;
//3-未建立或不存在

function 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;

来源:https://zhidao.baidu.com/question/486040041.html

判断线程是否存在使用:
if Assigned(workthread) then
begin
//do work
end;

释放线程使用:
可以使线程对象自动释放,使用:workthread.FreeOnTerminate :=True;
如果想自己释放线程则应该先判断线程是否存在和是否结束然后再释放,使用:
if Assigned(workthread) and (not workthread.Finished) then
begin
//workthread.terminate; //停止线程
//workthread.suspended; //使线程暂停
以上两种都可以,如果使用Terminate则应该等待线程完全结束
workthread.Free; //释放线程
end;

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值