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