gpt4 book ai didi

multithreading - Delphi检查TThread是否仍在运行

转载 作者:行者123 更新时间:2023-12-03 14:41:49 26 4
gpt4 key购买 nike

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

德尔福可以做到这一点吗?

最佳答案

您问题的直接答案是 Finished TThread 的属性。但是,我不建议这样做。它会引导您进入问题中提出的基于 Sleep 的相当令人讨厌的循环。

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

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

我建议您使用这些选项之一,而不是您自己开发的基于 Sleep 的循环。根据我的经验,选项 3 通常会产生最干净的代码。但在不了解所有要求的情况下,很难给出严格的建议。只有您拥有这些知识。

关于multithreading - Delphi检查TThread是否仍在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21190562/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com