0

我已经开始考虑使用 Omnithread 来使用多线程改进我的 Delphi 应用程序。文档很好地涵盖了创建一个或多个工作任务,因此我从按钮单击调用的长操作可以替换为此演示代码(Async、CreateTask 等)。我遇到的困难是如何替换我最“混乱”的代码,其操作如下。

我有一个对应于硬件模块的单个类实例的概念。该类发布了一个或多个属性,这些属性公开了硬件的当前值和设置。属性可能是只读的或读/写的。对于这些类实例中的每一个,可以有从零到几个可见的显示表单。显示表单具有 TTimer 和上述已发布属性的内置列表。该列表被迭代以匹配适当命名的控件,例如标签或编辑控件,并且使用 RTTI 机制来获取和设置控件及其属性之间的值。结果是一个表单,它为实际硬件模块提供了一个很好的 UI,其副作用是可以打开多个表单,修改其中一个表单上的数据会导致其他表单在不久之后显示该数据。此属性监视由 TTimer 以 300 ms 的间隔滴答执行。每个刻度使它扫描类的所有属性并刷新其窗体上的匹配控件。计时器在打开表单的生命周期内运行。表单在需要时创建然后释放(这具有有用的性能优化,即在没有打开表单来检查硬件的情况下,应用程序必须尽可能快地运行,因为没有监控任务可以运行)。

有没有更好的方法使用线程来访问我发布的属性,而不是在 UI 线程中使用 TTimer?或者同步问题是否会超过任何优势?如果线程很有用,如何创建重复任务,例如模拟滴答计时器?

4

0 回答 0