12

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

目前我正在评估 '<a href="http://otl.17slon.com/index.htm" rel="nofollow noreferrer">OmniThreadLibrary' - 到目前为止它看起来不错并且可以满足我的一切需求。

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

(我正在使用 D2006 和 D2009)

4

4 回答 4

14

根据素食主义者的建议

基于我评估OmniThreadLibrary的几个小时

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

1)使用简单

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

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

4)很容易做进程间消息

5) 仍在积极开发中

于 2009-03-23T12:08:40.763 回答
7

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

于 2009-03-22T07:12:24.197 回答
4

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

* TIdThreadSafeInteger
* TIdThreadSafeBoolean
* TIdThreadSafeString
* TIdThreadSafeStringList 

......还有更多

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

于 2009-03-22T07:14:10.853 回答
2

在过去的 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 版本)
  • 绝地JCL
  • 涡轮动力缩写
  • 一个 XML 整洁的库(可选)
  • 数据库抽象库(可选)

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

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

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

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

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

PS另外几点:

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