【问题标题】:Delphi - Threading frameworks [closed]Delphi - 线程框架[关闭]
【发布时间】:2010-10-14 19:31:17
【问题描述】:

我正在寻找在我的 Delphi 应用程序中使用的线程框架。

目前我正在评估“OmniThreadLibrary” - 到目前为止它看起来不错并且可以满足我的一切需求。

Delphi 还有其他“线程框架”吗?

(我正在使用 D2006 和 D2009)

【问题讨论】:

  • 另一个是 Mitov Software 的TBMDThread set
  • 警惕字符串类型的自动转换。 - 特别是往返宽弦。另请注意,许多标准函数不是线程安全的。 (例如,格式)。
  • 我认为您应该添加 OmniThreadLibrary 作为您问题的答案。然后我们可以对其进行投票以与其他选项进行比较。
  • 线程框架怎么样?
  • 线程框架与数据访问方法密切相关,通常是锁定,但也可以使用跨区域内存访问和其他方法,所以,抱歉,我不明白你的问题。

标签: multithreading delphi frameworks omnithreadlibrary


【解决方案1】:

根据素食者的建议

根据我对 OmniThreadLibrary

的几个小时评估

这里有一些我喜欢它的地方

1) 使用简单

2) 它隐藏了多线程的大部分细节

3) 几行代码就可以设置多个线程

4) 很容易做进程间消息

5) 它仍在积极开发中

【讨论】:

  • +1。与您的第二点相关的是 IMO,它专注于可执行工作单元(任务)而不是线程。线程(或线程池)只是完成工作的工具。这就是使它成为一个真正的框架的原因,而不是 VCL 线程的简单外观。
  • 不利的一面是,它的文档很糟糕。但我会解决这个问题 - 我保证。我会我会的!
  • 好吧 gbar 是诚实的:文档必须改进,尽管如此……
【解决方案2】:

不是这样的框架,但有AsyncCalls。它的范围与 OmniThreadLibrary 不同,但它也支持旧版本的 Delphi。

【讨论】:

    【解决方案3】:

    Internet Direct (Indy) 在 IdThreadSafe.pas 中包含 IdThread 和线程安全数据类型:

    * TIdThreadSafeInteger
    * TIdThreadSafeBoolean
    * TIdThreadSafeString
    * TIdThreadSafeStringList 
    

    ...还有更多

    Jedi 代码库 (JCL) 还包括同步类和函数(大约十个类)

    【讨论】:

    • 两者都至少低一个抽象级别。不是我所说的线程框架。
    • 我不知道 Indy 线程安全数据类型。很酷!
    【解决方案4】:

    在过去 10 年中,我一直在开发自己的扩展线程框架,该框架还与类似架构的通信框架集成。在这个阶段,它可以与 Delphi 2005-2007 一起使用,但很快将可用于 Delphi 2009-2010。该应用程序开发框架可用于构建大规模分布式系统,因为它旨在使任何线程能够在任何进程中运行,并使用简单的线程通信协议,无论线程在同一进程中还是在不同进程中,该协议都是相同的在不同的机器上。

    作为一项附加功能,我现在在 C#/Visual Studio 中运行此框架,因此使用此框架构建的分布式系统可以混合使用 Win32 和 .NET 应用程序,所有应用程序都使用相同的设计方法。框架可以从http://www.adug.org.au/downloads/CSIFramework.html下载

    我的框架使用的库并不像网站上出现的那样广泛(我刚刚改写了该页面,但可能需要一天左右的时间才能更新)。此外,所有必需的文件(除了数据库抽象层)都包含在框架中,因此无需安装第三方库即可使用框架。

    除了 Delphi,使用的库有:

    • Indy(包含在 Delphi 中,虽然我使用的是最新的 pre-unicode 版本)
    • JEDI JCL
    • 涡轮动力缩写
    • 一个 XML 整洁的库(可选)
    • 数据库抽象库(可选)

    我已经修改了一些外围 Delphi 单元 1) 以修复 Delphi 2006 中开放 XML 实现中的内存泄漏(随后在以后的 Delphi 版本中修复),2) 将服务应用程序与我的日志记录框架集成,以及 3) 以将独立 SOAP 服务器与 Indy 10(不是 Delphi 2006 中包含的 Indy 9)集成。

    实际上,我的框架不仅仅是一个线程框架,尽管线程框架是其中的一部分。线程框架是通过将所有线程实现为线程队列来构建的。在线程队列之间传递的“消息”实际上是封装在通用类型对象中的数据,这允许我在线程之间传递以任何方式结构化的任何数据。我可以通过添加消息在线程之间异步传递消息,也可以通过添加消息并接收消息作为响应来同步传递消息。线程本身订阅其他线程接收消息,因此在设计时线程之间没有耦合。

    此框架已扩展为包括通信服务器和客户端,以及主 GUI 线程,具有与线程队列完全相同的消息传递接口,因此将消息发送到远程进程或将其传递到 GUI,使用与线程之间使用的语法相同。该框架的设计方式完全不需要了解多线程开发的任何知识,即可构建跨多个进程和多个线程部署的分布式系统。

    除了这个框架之外,还有很多其他的东西,在过去的 10 年里,我投入了 2 年多的时间来开发这个框架。它已成功部署在多层警报监控系统中(在三个应用程序中使用 20 多个不同类别的线程),我目前正在使用此框架在 Visual Studio 2008 中构建分布式系统。

    简而言之,如果你想要的只是一个简单的线程框架,那么这可能是矫枉过正。但是,如果您想开发一个可能跨越多个应用程序的复杂多线程系统,那么学习曲线可能是值得的。

    PS另外几点:

    • 线程启动和关闭全部由框架处理(无需编写任何代码)
    • 构成应用程序的线程(编号和配置)都在 XML 配置文件中定义,而不是在代码本身中定义(无需编写任何代码将它们包含在应用程序中)
    • 如果您使用数据库抽象组件,那么多线程数据库访问将自动可用(无需额外代码)
    • 我目前正在添加线程池,这将允许任何线程队列具有指定数量的实例化线程(同样,无需编写任何代码来执行此操作)
    • 您可以从网页下载一个简单的开发人员指南,该网页也包含在框架下载中,从开发人员的角度概述了框架
    • 框架本身正在非常活跃的开发中,随着 Delphi 的下一个版本,我希望有一个在 Win32 上运行的版本(在 Delphi 下)、一个 .NET 版本(C#/Visual Studio)和一个 Linux 版本(使用新的 Deplhi 跨平台编译器)

    【讨论】:

      猜你喜欢
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      相关资源
      最近更新 更多