Delphi检查TThread是否仍在运行

时间:2014-01-17 16:11:53

标签: multithreading delphi

我正在使用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吗?

1 个答案:

答案 0 :(得分:9)

您问题的直接答案是TThread的{​​{3}}属性。但是,我不建议这样做。它会引导您进入问题中存在的相当讨厌的基于Sleep的循环。

有许多更清洁的选项,至少包括以下内容:

  1. 使用Finished阻止,直到线程完成。这将阻止调用线程,这将阻止显示UI或响应用户。
  2. 在循环中使用WaitFor,传递线程句柄。这允许您等到线程完成,但也为UI提供服务。
  3. MsgWaitForMultipleObjects事件实现事件处理程序。这允许您以事件驱动的方式通知线程的消亡。
  4. 我建议您使用其中一个选项,而不是基于本土Sleep的循环。根据我的经验,选项3通常会导致最干净的代码。但是在不了解所有要求的情况下很难给出严格的建议。只有你有这方面的知识。