我正面临着如何在单独的进程中运行应用程序的不同部分的问题,因为QProcess的成员函数设置进程名称需要完整路径。C++ Qt在单独的进程中运行应用程序的部分
void setProgram(const QString &program)
但我试图运行的过程基本上是主应用程序的一个模块。所以让我解释一下我想要基本实现的目标。
该应用程序具有QMainWindow作为中央窗口,它将控制所有不同的模块,监视它们,停止/重新启动它们,通过IPC机制与它们进行通信。
- 因此,例如,一个模块有一个QWebEngineView,将用户引导至某个网站,并管理该用户的会话信息(饼干,认证等),并让用户使用该网站像他通常会通过浏览器。
- 另一个模块将持续执行CPU密集型计算,而不会阻塞应用程序的任何部分。
- 另一个模块将呈现一个完整的Javascript图表应用程序。
等等。在这个应用程序中有很多这样的重量级模块,所以使用线程方法是不可取的,因为基本上这些模块需要在其单独的内存空间中运行,并且将充当MainWindow进程的子进程。使用D-Bus,SharedMemory可以很好地处理进程之间的通信。
但我不明白如何实际创建这些子进程,当用户点击MainWindow中的特定动作/按钮。再次,这些模块非常集成在一个应用程序中,并且由于安全性和完整性限制而无法在外部调用。所以,请让我知道任何方式来实现这一点。
快速而肮脏的方法是将独立模块编译为独立应用程序,然后将其放入资源中,在运行时将它们作为临时文件编写并运行。 – Marco
否则,如果你想它干净和复杂(也可能不是跨平台),我会看看这个:http://www.rohitab.com/discuss/topic/31681-c-run-program-from-memory-而不是文件/ – Marco
是的,这是从内存中运行程序或子模块的想法,就像在单独的线程中运行一个函数一样。但是这是一个仅限于Linux的应用程序,并且永远不会在Windows上运行,所以我一直在寻找Linux特定的解决方案。 – Maxx