gpt4 book ai didi

delphi - 主应用程序忙时如何避免线程卡住

转载 作者:行者123 更新时间:2023-12-03 18:53:45 27 4
gpt4 key购买 nike

我有点问题。我想显示一个进度表,当主应用程序执行繁重的操作时,该进度表仅显示一个动画。

我已经在线程中完成了此操作,并且当用户不执行任何操作时它也可以正常工作。但是,当我的主应用程序繁忙时,它就停止了。

我无法将Application.ProcessMessages放在不同的代码行之间,因为我正在使用处理时间很长的3rdparty组件。

我的想法是创建一个新流程,并在该流程中创建一个执行动画的线程。现在,当主应用程序执行繁重的操作时,这不会停止线程形式的执行。

但正如我所见,只有执行新程序才能创建新进程。

对于主应用程序繁忙时,如何使线程继续执行,有没有人有解决方案?

/布莱恩

最佳答案

如果您的工作线程优先级不比主线程低,则不要使用Synchronize()方法,不要调用SendMessage(),也不要尝试获取主GUI线程已经获取的任何同步对象,那么您的辅助线程应继续工作。

由于VCL并不是线程安全的,因此人们经常建议使用Synchronize()执行代码以在VCL线程的上下文中同步更新VCL控件。但是,如果VCL线程本身正忙,则此操作将无效。您的工作线程将阻塞,直到主线程继续处理消息为止。

无论如何,您的应用程序设计是不幸的。您应该在辅助线程中执行所有冗长的操作,并保持主线程响应用户交互。即使使用精美的动画,您的应用程序仍会卡在用户面前,因为在VCL线程忙于执行其他操作且不处理任何消息时,它不会重绘。尝试将冗长的代码放入工作线程中,并在主线程的计时器事件中执行动画。

关于delphi - 主应用程序忙时如何避免线程卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1729224/

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