我正面临着如何在单独的流程中运行应用程序的不同部分的问题,因为设置流程名称的QProcess的成员函数需要一个完整的路径。
void setProgram(const QString &program)
但我正在尝试运行的过程基本上是主应用程序的一个模块。那么让我解释一下我基本上想要实现的目标。
应用程序将QMainWindow作为中央窗口,它将控制所有不同的模块,监视它们,停止/重启它们,通过IPC机制与它们通信。
等等。在这个应用程序中有许多这样的重量级模块,因此使用线程方法是不可取的,因为基本上这些模块需要在它们各自的内存空间中运行,并且将充当MainWindow进程的子进程。使用D-Bus,SharedMemory可以很好地处理进程之间的通信。
但我无法弄清楚当用户点击MainWindow中的特定操作/按钮时,如何实际创建这些子进程。同样,这些模块在一个应用程序中非常集成,并且由于安全性和完整性限制而无法在外部调用。所以请告诉我任何实现这一目标的方法。
答案 0 :(得分:2)
一种方法是使用相同的可执行文件,并使用命令行参数控制启动哪个模块。请参阅this answer中的一个简单示例。进程间通信可以使用本地套接字完成,您也可以跨进程发送插槽调用 - 例如, CuteIPC