应用程序的 C++ Qt 运行 部分在单独的进程中

C++ Qt Run parts of an Application in separate process

我正面临如何 运行 应用程序的不同部分在单独进程中的问题,因为设置进程名称的 QProcess 的成员函数需要完整路径。

void setProgram(const QString &program)

但我尝试 运行 的过程基本上是主应用程序的一个模块。所以让我解释一下我基本上想要实现的目标。

应用程序以 QMainWindow 作为中央 window,它将控制所有不同的模块,监视它们,stop/restart 它们,通过 IPC 机制与它们通信。

  1. 例如,其中一个模块有一个 QWebEngineView,它将用户引导至某个网站并为该用户管理会话信息(cookie、身份验证等),并让用户像他自己一样使用该网站通常通过浏览器。
  2. 另一个模块将持续执行 CPU 密集计算,而不会阻塞应用程序的任何部分。
  3. 另一个模块将呈现一个完整的 Javascript 图表应用程序。

等等。此应用程序中有许多此类重量级模块,因此使用线程方法是不可取的,因为基本上这些模块需要 运行 在其单独的内存中 space 并将充当 MainWindow 进程的子进程.使用 D-Bus,SharedMemory 可以很好地处理进程之间的通信。

但我想不通的是,当用户单击 MainWindow 中的特定 actions/buttons 时,如何实际创建这些子进程。同样,这些模块非常集成在一个应用程序中,并且由于安全性和完整性限制而无法从外部调用。所以请让我知道实现这一目标的任何方法。

一种方法是使用相同的可执行文件,并使用命令行参数控制启动哪个模块。请参阅 this answer. Inter-process communication can be done using local sockets, you can also send slot calls across processes - see e.g. CuteIPC.

中的一个简单示例