我正在使用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吗?
答案 0 :(得分:9)
您问题的直接答案是TThread
的{{3}}属性。但是,我不建议这样做。它会引导您进入问题中存在的相当讨厌的基于Sleep
的循环。
有许多更清洁的选项,至少包括以下内容:
Finished
阻止,直到线程完成。这将阻止调用线程,这将阻止显示UI或响应用户。WaitFor
,传递线程句柄。这允许您等到线程完成,但也为UI提供服务。MsgWaitForMultipleObjects
事件实现事件处理程序。这允许您以事件驱动的方式通知线程的消亡。我建议您使用其中一个选项,而不是基于本土Sleep
的循环。根据我的经验,选项3通常会导致最干净的代码。但是在不了解所有要求的情况下很难给出严格的建议。只有你有这方面的知识。