不幸的是,QtConcurrent 不处理任何一个。
在最一般的方法中,您只需要网络上的一些工作机器,以及通过 ssh(如果它们是 Unix)或通过 Windows 凭据(在 Windows 网络上)连接到它们的方法。此时,您可以向工作人员发送二进制文件并执行它。在 Qt 中这样做当然是可能的,但您需要包装一些其他库(例如,用于 RPC 调用的 Samba 或 openssh)才能做到这一点。
无论软件是否可以“分发自身”或以其他方式安装在工作人员身上,您都可以在多台机器上运行它。现在他们必须沟通,一个是主人,另一个是奴隶。主选择可以通过命令行参数完成,甚至可以通过两个二进制文件来完成:仅包含后端功能的工作程序和包含两者(并具有某种 UI)的前端。
此时,您可以利用Qt Remote Objects,您要“分发”的想法是QObject
s 在插槽中工作,并通过插槽的返回值或发送信号返回结果。它不如直接使用 QtConcurrent 方便,但一般来说,如果没有 C++ 尚未完全提供的一些自省,就无法透明地分配工作。
我知道 OpenMPI 不是基于 Qt 的解决方案,它确实可以工作并使生活变得轻松,并且可以肯定它可以与 Qt 代码互操作——您甚至可以以这种方式分发方法和 lambda(使用一些技巧)。
如果您管理封装为QObject
s 的工作对象,则以循环方式分发工作并不难。QObject
然后,您可以拥有一个充当代理的前端:您将所有工作提交给它,它会发出所有结果的信号,但在内部它会调用远程QObject
s 上的插槽。
您对演示感兴趣吗?如果有足够的需求,我可以写一个:)