Delphi检查TThread是否仍在运行

uac*_*man 10 delphi multithreading

我正在使用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;
Run Code Online (Sandbox Code Playgroud)

Delphi有可能吗?

Dav*_*nan 10

直回答你的问题就是Finished财产TThread.但是,我不建议这样做.它会引导您进入问题中存在的相当讨厌Sleep的循环.

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

  1. 使用WaitFor阻塞,直到该线程完成.这将阻止调用线程,该线程将阻止显示UI或响应用户.
  2. MsgWaitForMultipleObjects在循环中使用,传递线程句柄.这允许您等到线程完成,但也为UI提供服务.
  3. 为事件实现事件处理程序OnTerminate.这允许您以事件驱动的方式通知线程的消亡.

我建议您使用其中一个选项而不是Sleep基于本土的循环.根据我的经验,选项3通常会导致最干净的代码.但是在不了解所有要求的情况下很难给出严格的建议.只有你有这方面的知识.

  • 我无法理解这个评论。对不起。 (2认同)