将一个多线程的Delphi应用程序移植到Mac:我的选择有哪些?

12

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

我的应用程序分为一个简单的UI可执行文件(单线程)和一个不可见的引擎(它严重依赖于OmniThreadLibrary 3.02和Cromis DirectoryWatch

两个EXE之间通过Cromis.IPC进行通信

这就是说,我主要遇到了这三个组件的问题(OmniThreadLibrary、Cromis IPC和DirectoryWatch)

我现在的重点是引擎,其中大部分代码都在那里。

我的问题是:是否有类似于OmniThreadLibrary、Cromis DirectoryWatch和Cromis.IPC的东西适用于Mac?(无论是使用lazarus还是将XE2作为目标编译器与Mac一起使用)

"

这个答案将有助于我决定是否应该使用Delphi XE2还是Lazarus(一种我完全不熟悉的IDE),并且看看以最小的麻烦提供/支持Windows和Mac的最佳长期方法是什么。

"

2
Delphi 真的应该有一个跨平台并发支持库... - mjn
1
@David:我们使用它非常成功。这与我们的Kylix冒险完全不同;-) - Giel
2
@mj2008:老实说,我没有深入研究OTL源代码,但我倾向于认为它与Windows API紧密相关(我确定Cromis DirectoryWatch是这样的)。此外,我担心TThread绝对无法与OTL相匹敌,我甚至无法想象不久的将来会使用它! - TheDude
1
RO有点贵(我的意思是仅IPC就要400美元,这真的很痛苦!),但作为最后的选择似乎值得一看,谢谢! - TheDude
2
OTL只能在Windows系统下运行,因为它在很多地方使用了Windows消息和Windows API等待,所以目前不支持跨平台。 - jachguate
显示剩余4条评论
1个回答

1
我回答你关于编译器/IDE的部分问题。我使用过Lazarus,必须说它不会花费太长时间让你上手(除了你的确切要求)。Lazarus越来越专业化;其中一些开发人员是专业的Delphi/XE2程序员。我认为,由于你想在Mac上提供应用程序,无论如何你都需要做一些工作。但是,如果你决定使用Lazarus,你可以大部分时间轻松地构建Linux、Mac和Windows的应用程序,因为大多数东西从同一基本未经修改的源代码中构建出来的各个平台都是正确的。当然,正如你所说,你的代码严重依赖OTL。由于OTL只是一个Windows库,我认为你将不得不努力工作。(即...你可能不得不自己编写一个等效的库,或者让别人为你编写)至于Chromis Directory watch,我还没有找到任何东西。

希望这能有所帮助。干杯

这个Lazarus教程展示了内置的线程功能。我不知道有没有相应的库符合你的搜索需求。干杯


在我看来,更改OTL并不意味着“有些重写”,而是整个重写,因为您必须更改解决问题的所有方法,并且要求使用更基本的构造,例如TThread、手动数据传递。@happy coder,您真的了解OTL吗? - jachguate
嗯,我想我在使用一些加拿大轻描淡写的措辞。我知道这是一项艰巨的工作。不,我不知道OTL,只是在搜索网络时了解了一些信息。不过,我的关于Lazarus的评论仍然成立,你特定的问题可能需要进行大量重写,但Lazarus环境非常易于上手。干杯! - happy coder
这不是我的问题,因为我不是OP。你的说法可能是正确的,但请记住你首先要回答特定的OP问题,这涉及到OTL,而在我看来,OTL才是主要的问题,而不是编译器。祝好! :) - jachguate
@jachguate,感谢您的评论。这是很好的建议。我已经编辑了我的回答,以更准确地反映我关注的问题部分。(我在这里还比较新,所以我很感激您的评论)。我没有删除我的回答,因为它对帖子的标题提供了一个很好的答案,任何浏览此问题并对此感兴趣的人都会留下我认为有用的东西。干杯! - happy coder
感谢 @happy coder 和 @jachguate 的建议。我完全同意 jachguate 的观点,OTL(Omnithread Library)存在于一个与 TThread 相距甚远的不同星系中。我发现了一个叫做 Threadpool Engine 的库,作者表示他之前曾与 Primoz Gabrijelcic(OTL 的作者)合作过。我不知道它有多好,但这是唯一一个在 FreePascal 中超越 TThread 的库。Primoz 在 之前的播客 中已经表达了他对 Delphi 和 Mac 的看法。 - TheDude
关于Cromis.DirectoryWatch,我找到的最接近(实际上是唯一的:())东西是inotify。如果有其他参考资料,请随时在此处添加。 - TheDude

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接