Delphi:在外部控制的处理过程中以被动UI的形式存在

达斯·吉兹卡(DarthGizka)

在Delphi表单应用程序中,如何在没有用户输入的情况下获取要执行的处理代码,以及如何以给定的帧速率更新UI?

所讨论的代码是一个测试框架,用于测试/测量重负载下组件的并发操作,在同一台或不同机器上具有多个进程。重点主要放在数据库操作(点对点或基于服务器)和文件和字节范围锁定方面的文件系统可靠性/性能上,尤其是在具有异构客户端OS的网络上。

帧等待外部事件(IPC,文件系统,网络),这些事件表示测试运行的开始和停止。在启动信号之后,它将紧密循环调用提供的测试功能,直到收到停止信号为止。然后,它等待下一个启动信号或该信号退出。

多年来,我一直在FoxPro中做类似的事情。这很容易,因为Fox不必像Delphi的Application.Run()一样坐在消息泵上。所以我只是提出了一个非模式形式,安排每两百毫秒刷新一次,然后深入到程序代码中。在原始Win16 / Win32中,它虽然不太容易,但仍然相当简单。

在Delphi中,我什至不知道要看哪里,并且到目前为止,文档(D7 + XE2)的结构已经成功地反抗了我。在Delphi中最简单的方法是什么?我想我总是可以启动一个新线程进行实际处理,并使用原始的Win32调用(例如RedrawWindow()和PostQuitMessage())来使应用程序随心所欲。但这看起来相当笨拙。当然,必须有“德尔菲”方式做到这一点吗?

大卫·赫弗南(David Heffernan)

创建一个后台线程来执行处理任务。这样,主UI线程就可以根据需要自由服务于其消息循环。

任务需要呈现给用户的任何信息都必须同步或排队到主UI线程中。当然,编写完整的应用程序需要更多细节,但是线程化是解决方案。您可以使用高级库来保护自己免受原始线程的侵害,但这并不能改变您需要将处理工作转移到主UI线程以外的其他线程这一基本事实。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在删除语句批处理过程中是否存在运算符?

对象在处理过程中相遇时的短语

在处理过程中循环读取文件

在多处理过程中抑制输出

批处理过程中重复输入

如何在Java处理过程中对文件排序

在处理过程中缩放应用程序并保持宽高比相同

在处理过程中在设备之间切换3改变外观

jQuery:事件对象是否在事件处理过程中隐式传递?

我可以在处理过程中重定向工作线程以执行其他工作吗?

Ajax处理过程中,Ajax显示正在加载图像

为什么在多处理过程中得到如此糟糕的结果?

为什么时钟中断在处理过程中永远不起作用?

将变量添加到批处理过程中

如何在错误处理过程中捕获无效 SQL

在函数处理过程中加载消息

在外部数据库上更新时,存储过程中的令牌未知错误

在转置过程中处理不存在的条目

如果应用程序在处理过程中崩溃,MQ Light如何确保不会从队列中删除消息?

当在信号处理过程中不使用volatile关键字时,演示编译器的优化效果?

在多线程处理过程中,对象析构函数始终被调用,但对象并未超出范围

使用 python 从 azure 函数读取元数据(blob 和容器名称),但在处理过程中显示 NoneType

迁移到 CXF 3.2.7 -> 如何解决 SOAP RQ 处理过程中与密码相关的安全错误?

我如何在 python 中的字符串处理过程中保留变音符号

在处理过程中的最后一条语句之后,Oracle PL SQL过程需要很长时间才能完成

如果在处理过程中出现问题,请停止处理kafka消息

令牌仅在预处理之后还是在预处理过程中进行计数?

在 UseEffect 中传递给子组件的 UseEffect 中由 Parent 的异步函数定义的道具在其 UseEffect 的清理过程中不会持续存在

火花流处理过程中使用的全局类变量:是广播变量吗?