除了processmessage之外,还有什么我可以用来保持程序响应?

时间:2013-01-08 12:45:06

标签: delphi

我有一个可以运行很长时间扫描数据库的应用程序 在此过程中,我通过使用processmessage使我的程序保持响应 当我的进度条更新并且被包含时,会触发此流程消息 大多数情况下都可以正常工作,但是当数据库变大时,进度条上升1%需要更长的时间,程序在此之前就会无响应。

除了流程消息之外,还有另一种方法可以让我的程序保持活跃吗?

2 个答案:

答案 0 :(得分:8)

多线程就是答案。标准的Delphi应用程序基本上是一个单线程应用程序,可以一次完成一件事。因此gui锁定,如果它正在做其他事情,它就无法保持响应。

如果你想要一个响应的gui并同时进行繁重的提升,你需要在单独的线程或线程中进行繁重的工作。这样你的主线程可以确保你有一个响应程序,工作线程可以完成繁重的工作。 这适用于繁重的数据库工作,但也适用于例如下载文件或情况,例如远程服务器的答案可能需要很长时间。

但是这个答案可能会给你更多的答案,因为解释如何使用多线程对这个问题的解释太大了。

另一件事:对数据库代码进行长时间的审视。你如何从数据库中检索记录,数据库上是否有好的索引等等。在你开始考虑多线程之前,你可以通过优化这些代码来提高疯狂的速度。

我找到了以下资源:http://thaddy.co.uk/threads/,您可以将图片下载到http://cc.embarcadero.com/item/14809,以获得非常有用的线程教程。

答案 1 :(得分:4)

如果要使GUI程序显示响应,则必须及时为消息队列提供服务。别无选择。

当涉及到运行数据库查询时,在不冻结UI的情况下执行此操作的方法是将查询移动到其他线程。