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

2023-11-25

我有一个可以运行很长时间扫描数据库的应用程序。
在此过程中,我使用 processmessage 保持程序响应。
当我的进度条更新并增加时,会触发此进程消息。
在大多数情况下,这工作得很好,但是当数据库变得更大时,进度条需要更长的时间才能上升 1%,直到那时程序才会变得无响应。

除了处理消息之外,还有其他方法可以让我的程序保持活动状态吗?


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

如果你想拥有一个响应式图形用户界面并同时完成繁重的工作,你需要在一个或多个单独的线程中完成繁重的工作。这样你的主线程可以确保你有一个响应迅速的程序,而工作线程则完成繁重的工作。 这对于繁重的数据库工作非常有用,但也适用于下载文件或远程服务器的响应可能需要很长时间的情况。

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

但另一件事是:仔细检查你的数据库代码。您如何从数据库中检索记录,数据库上是否有良好的索引等等。在您必须开始考虑多线程之前,您可以通过优化此代码来获得疯狂的速度提升。

我找到了以下资源:http://thaddy.co.uk/threads/您可以在以下位置下载该文件及其图片:http://cc.embarcadero.com/item/14809非常有用的线程教程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

除了 processmessage 之外,我还能用什么来保持程序响应? 的相关文章

  • 德尔福数据结构

    我可能需要在 Delphi 中做一个项目 并且是该领域的初学者 目前 我正在网上搜索资源 但由于资源站点太少而感到困惑 首先 你能给我一些好的网站 其中包含我迄今为止错过的 Delphi 资源吗 我也在 Delphi 中搜索数据结构 想知道
  • 如何仅使用 TADOQuery 组件将图像插入数据库

    我有一个简单的基本问题 我正在尝试使用将图像插入数据库Insert与其他列值的语句也使用TADOQuery成分 由于代码已经由某人编写 因此我想在此处放置一些虚拟示例代码 以供您澄清相应的步骤 请注意 这可以正常工作TQuery组件 因为我
  • 如何遍历任意给定集合中的枚举?

    我有很多枚举类型 它们与相应的集合相结合 例如 type TMyEnum meOne meTwo meThree TMyEnums set of TMyEnum 我正在尝试提出一组可以运行的函数any枚举集 而不是为每个枚举编写单独的函数
  • 如何在 Delphi DBLookupComboBox 中选择正确的项目

    我有一个数据库查找组合框连接到数据库查询 那部分工作正常 当我运行程序时数据库查找组合框填充有查询的结果 我想看看数据库查找组合框填充第一项 请选择 当 的时候程序第一次运行或者当一个新项目行动已启动 见下图 另外 如果我正在加载以前保存的
  • 为什么未初始化的指针会导致内存访问冲突接近 0?

    据说often 但并非总是如此 当你在接近于零的内存位置 比如 89 美元 获得 AV 时 你就有了一个未初始化的指针 但我也在 Delphi 书籍中看到了这一点 嗯 或者它们都是由同一作者写的 Update 引自 Bob Swart 等人
  • 当responseText包含有效的Xml时,IXMLHttpRequest.responseXml为空,没有解析错误

    我正在从中获取一些 XML政府网站 http www bankofcanada ca stats assets rates rss noon en all xml http www bankofcanada ca stats assets
  • delphi中如何实现多重继承?

    我正在对一个旧库进行完全重写 我不确定如何处理这种情况 为了便于理解 大家都欢呼自行车类比 我有以下课程 TBike 自行车本身 TBikeWheel 自行车的一个轮子 TBikeWheelFront and TBikeWheelBack
  • Delphi 5 中的 Oracle 数据库连接

    我正在使用 Delphi 5 版本 我想连接到 Oracle 数据库 我有 TDatabase 组件 我不知道如何通过 Delphi 连接到数据库 请提供连接数据库的步骤 谢谢 The TDatabase http docwiki emba
  • Mac 上的 Delphi - 可能吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我负责一个 Delphi Win32 项目管理应用程序 我刚刚完成了向 Delphi 2009 的迁移
  • Delphi 6 命令行编译:无 DCU

    当对 dpr 文件使用 dcc32 时 它会生成一个 dll 但不会生成 dcu 项目级别 cfg 使用 N 开关设置路径 但指定的目录中没有任何内容 当 E 开关正在工作时 它必须看到 cfg 我尝试在调用 dcc32 之前对 dpr 文
  • 如何检查注册表项是否存在

    我不知道我的错误在哪里 它总是跳到else分支 但是密钥存在 我检查了几次 var reg TRegistry begin with TRegistry Create do try RootKey HKEY CURRENT USER Ope
  • TThread.resume 在 Delphi-2010 中已弃用,应该在什么地方使用?

    在我的多线程应用程序中 I use TThread 挂起 and TThread resume 自从将我的应用程序移至 Delphi 2010 后 我收到以下警告消息 DCC 警告 xxx pas 277 W1000 符号 Resume 已
  • Delphi XE2,vcl样式重新创建窗口句柄

    在运行时应用新样式后 我的应用程序的 MainForm 创建一个新的窗口句柄 有什么方法可以阻止此操作或重新分配句柄 因为我收到了大量以下错误 系统错误 代码 1400 无效的窗口句柄 有什么方法可以操纵强制分配新句柄的进程吗 我通过执行以
  • 创建无边框表单而不丢失 Windows 命令

    我已将表单更改为无边框表单 我只是更改了BorderStyle财产给bsNone 但现在我的应用程序失去了 Windows 锚点和一些命令 例如 WIN 对齐表单客户端 WIN 最小化表格 WIN 表格右对齐 WIN 表格左对齐 我尝试过设
  • 缓冲区为空,但 IdTCPClient.IOHandler.InputBufferIsEmpty 为 false

    我在使用 idTCPClient 从 telnet 服务器读取缓冲区的以下代码中遇到问题 procedure TForm2 ReadTimerTimer Sender TObject var S String begin if IdTCPC
  • 从 C++ .dll 到 Delphi Forms 应用程序的 PostMessage 问题

    我有用 Delphi 7 编写的 Windows 窗体应用程序和使用 MFC 编写的 C dll 目前 我正在尝试实现从 dll 到主可执行文件的基本消息发布 以在进度条上显示用户计算过程 但遇到了几个问题 让我先描述一下我的方法 我在 D
  • 如何改变TDateTimePicker的颜色?

    如何更改 a 的颜色TDateTimePicker A 日期和时间选择器可以有一种颜色 通常这是通过设置来完成的Color procedure TForm1 FormCreate Sender TObject begin DateTimeP
  • 光标不工作时完成课程

    我在 2010 年和 XE2 中广泛使用了 Delphi 中的 Complete Class at Cursor 函数 最近 在安装 XE2 的 Update 4 后 Cursor 上的 Complete Class 停止工作 经过一些研究
  • 惠普定制 OEM Windows 上的 Delphi 平台错误

    我在设置我的计算机以便运行 Delphi 时不断遇到相同的错误 我已经在PLATFORM环境变量 将其转换为 win32 但仍然给出相同的错误 错误错误 平台变量 HPD 无效 PLATFORM 必须是以下之一 Win32 Win64 An
  • 在Delphi/Lazarus中设置提示窗口(THintWindow)的大小

    我正在尝试在 Lazarus 中进行自定义提示 到目前为止 我已经动态加载了提示中的文本 并自定义了字体 字体大小和字体颜色 我想限制提示窗口的宽度 有任何想法吗 这是我的代码 type TExHint class THintWindow

随机推荐