如何使用Omnithread转换多个Delphi TTimer后台扫描任务

时间:2012-09-06 15:47:20

标签: delphi omnithreadlibrary ttimer

我开始尝试使用Omnithread来使用多线程来改进我的Delphi应用程序。文档很好地创建了一个或多个工作任务,因此我可以用这个演示代码(Async,CreateTask等)替换我从按钮点击调用的长动作。我遇到困难的地方在于如何替换我操作如下的最“混乱”的代码。

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

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

0 个答案:

没有答案
相关问题