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的循环.
有许多更清洁的选择,至少包括以下内容:
WaitFor阻塞,直到该线程完成.这将阻止调用线程,该线程将阻止显示UI或响应用户.MsgWaitForMultipleObjects在循环中使用,传递线程句柄.这允许您等到线程完成,但也为UI提供服务.OnTerminate.这允许您以事件驱动的方式通知线程的消亡.我建议您使用其中一个选项而不是Sleep基于本土的循环.根据我的经验,选项3通常会导致最干净的代码.但是在不了解所有要求的情况下很难给出严格的建议.只有你有这方面的知识.