将多线程 Delphi 应用程序移植到 Mac:我的选择是啥?

Posted

技术标签:

【中文标题】将多线程 Delphi 应用程序移植到 Mac:我的选择是啥?【英文标题】:Porting a multi-threading Delphi application to Mac: what are my choices?将多线程 Delphi 应用程序移植到 Mac:我的选择是什么? 【发布时间】:2013-01-13 12:07:20 【问题描述】:

我需要将一个应用程序(用 XE2 编写)移植到 Mac。

我的应用程序分为一个简单的UI executable(单线程)和一个不可见的engine(它高度依赖于OmniThreadLibrary 3.02Cromis DirectoryWatch

两个 EXE 通过 Cromis.IPC

进行通信

也就是说我主要对这 3 个组件(OmniThreadLibrary、Cromis IPC 和 DirectoryWatch)有问题

我现在的重点是引擎,它拥有大部分代码。

我的问题是: 有没有类似于 Mac 的 OmniThreadLibrary, Cromis DirectoryWatch & Cromis.IPC 的东西? (无论是 Lazarus 还是 XE2 都以 Mac 为目标编译器)

答案对我决定是否应该使用 Delphi XE2 或 Lazarus(我根本不熟悉的 IDE)有很大帮助,并了解 什么是最好的长期以最少的麻烦提供/支持 Windows 和 Mac 的方法

【问题讨论】:

...应该有Delphi的跨平台并发支持库,真的... @David:我们使用它取得了巨大的成功。实际上与我们的 Kylix 冒险完全不同 ;-) @mj2008:老实说,我没有研究 OTL 源代码,但我倾向于认为它与 Windows API 密切相关(我确信 Cromis DirectoryWatch 是)。还有,我怕TThread绝对不是OTL的对手,我什至无法想象很快就会使用它! RO 有点贵(我的意思是 400 美元只是为了 IPC,太疼了!),但它似乎是最后的手段,谢谢! OTL 只是 windows,因为它在很多地方都使用 windows 消息传递和 windows API 来等待,所以,目前,OTL 不是跨平台的选项。 【参考方案1】:

我正在回答您关于编译器/IDE 的部分问题。我用过 Lazarus,我必须说你不会花太长时间来加快速度(除了你的确切要求)。 Lazarus 越来越专业了;许多开发人员都是专业的 Delphi / XE2 编码员。我认为既然你想让你的应用程序在 Mac 上可用,那么无论如何你都会有一些工作要做。但是,如果您决定使用 Lazarus,您可以在大多数情况下为 Linux、Mac 和 Windows 构建应用程序而无需付出太多努力……大多数东西只是从相同的大部分未修改的源代码为每个平台构建正确的。当然,正如您所说,您的代码严重依赖于 OTL 由于 OTL 是一个仅限 Windows 的库,我认为您将完成您的工作。 (阅读......你可能必须自己编写一个等效的库,或者让别人为你做) 至于 Chromis Directory watch,我还没有找到任何东西。

我希望这会有所帮助。干杯

这个Lazarus tutorial 显示了内置的线程功能。我不知道您正在搜索的等效库。干杯

【讨论】:

恕我直言,更改 OTL 并不意味着 一些重写,而是整个重写,因为您必须更改所有解决问题的方法并求助于更基本的构造,例如 TThread ,手动数据传递。你@happy coder 真的懂 OTL 吗? 好吧,我想我在那里使用了一些加拿大式的轻描淡写。我知道这是一项艰巨的工作。不,我不知道 OTL,只是我在梳理网络时所得出的结论。不过,我对 Lazarus 的评论仍然存在,您的特定问题可能需要大量重写这一事实并不能否定 Lazarus 环境非常平易近人的事实。干杯! 这不是我的问题,因为我不是 OP。您的陈述可能是正确的,但请记住,您首先要回答涉及 OTL 的特定 OP 问题,恕我直言,OTL 是这里的主要问题,而不是编译器。干杯!! :) @jachguate,感谢您的评论。这是个好建议。我已经编辑了我的回复,以更准确地反映我关注的问题的一部分。 (我在这里有点新,所以我很感激你的评论)。我没有删除我的回复,因为它确实为帖子的标题提供了一个很好的答案,并且任何扫描对此问题感兴趣的问题的人都会留下我认为有用的东西。干杯 感谢快乐编码员和@jachguate 的建议。我完全同意 jachguate 的观点,OTL 生活在一个不同的星系中,远离 TThread。我找到了一个名为Threadpool Engine 的库,作者表示他之前曾与Primoz Gabrijelcic(OTL 的作者)合作。我不知道它有多好,但它是 FreePascal 中唯一超越 TThread 的。 Primoz 已经在podcast sometime ago 中表达了他对 Delphi 和 Mac 的感受

以上是关于将多线程 Delphi 应用程序移植到 Mac:我的选择是啥?的主要内容,如果未能解决你的问题,请参考以下文章

将多线程合并到 C++ 中如何提高性能,为啥?

将 Delphi 逐步移植到 C++

Delphi中纤程的使用

将多线程输出保存到txt文件

Delphi 7程序移植到 Delphi XE上的一些小情况

Delphi 如何用多线程进行数据采集