在Delphi表单应用程序中,如何在没有用户输入的情况下获取要执行的处理代码,以及如何以给定的帧速率更新UI?
所讨论的代码是一个测试框架,用于测试/测量重负载下组件的并发操作,在同一台或不同机器上具有多个进程。重点主要放在数据库操作(点对点或基于服务器)和文件和字节范围锁定方面的文件系统可靠性/性能上,尤其是在具有异构客户端OS的网络上。
帧等待外部事件(IPC,文件系统,网络),这些事件表示测试运行的开始和停止。在启动信号之后,它将紧密循环调用提供的测试功能,直到收到停止信号为止。然后,它等待下一个启动信号或该信号退出。
多年来,我一直在FoxPro中做类似的事情。这很容易,因为Fox不必像Delphi的Application.Run()一样坐在消息泵上。所以我只是提出了一个非模式形式,安排每两百毫秒刷新一次,然后深入到程序代码中。在原始Win16 / Win32中,它虽然不太容易,但仍然相当简单。
在Delphi中,我什至不知道要看哪里,并且到目前为止,文档(D7 + XE2)的结构已经成功地反抗了我。在Delphi中最简单的方法是什么?我想我总是可以启动一个新线程进行实际处理,并使用原始的Win32调用(例如RedrawWindow()和PostQuitMessage())来使应用程序随心所欲。但这看起来相当笨拙。当然,必须有“德尔菲”方式做到这一点吗?
创建一个后台线程来执行处理任务。这样,主UI线程就可以根据需要自由服务于其消息循环。
任务需要呈现给用户的任何信息都必须同步或排队到主UI线程中。当然,编写完整的应用程序需要更多细节,但是线程化是解决方案。您可以使用高级库来保护自己免受原始线程的侵害,但这并不能改变您需要将处理工作转移到主UI线程以外的其他线程这一基本事实。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句