Delphi 检查TThread是否仍在运行

rjee0c15  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(223)

我正在使用TThread,我只需要找出线程是否仍在运行,如果需要很长时间,则终止应用程序。
例如:

MyThread := TMyThread.Create;
MyThread .Resume;
MyThread.Terminate;

total := 0;
while MyThread.isRunning = true do // < i need something like this
begin
  // show message to user to wait a little longer we are still doing stuff
  sleep(1000);
  total := total + 1000;
  if total > 60000 then 
     exit;
  end;

Delphi 是否可以实现这一点?

vof42yt1

vof42yt11#

直接回答你的问题是TThreadFinished属性。但是,我不推荐这样做。它会把你引向你在问题中提出的基于Sleep的相当讨厌的循环。
有许多清洁器选项,至少包括以下选项:
1.请使用WaitFor来封锁,直到执行绪完成为止。这会封锁呼叫执行绪,而无法显示UI或回应使用者。
1.在循环中使用MsgWaitForMultipleObjects,传递线程句柄。这允许您等待线程完成,但也可以服务UI。
1.为OnTerminate事件实现一个事件处理程序。这允许你以一种事件驱动的方式得到线程终止的通知。
我建议您使用这些选项中的一个,而不是您自己开发的基于Sleep的循环。根据我的经验,选项3通常会产生最干净的代码。但是在不了解所有需求的情况下,很难给予严格的建议。只有您了解这些知识。

相关问题