C++ 如何从QT(C+;+;)中的子进程联系父进程,以从类中执行方法?

C++ 如何从QT(C+;+;)中的子进程联系父进程,以从类中执行方法?,c++,qt,ipc,pipe,signals,C++,Qt,Ipc,Pipe,Signals,我有个问题。我目前正在用QT(C++)编写程序,我遇到了这个问题。如果我选中该复选框,它将启动一个方法,其中是implementfork()。父进程一直持续到最后(以保持未冻结的GUI)。子进程在ifinite循环中工作。完成一个序列后,我将必要的数据存储到共享内存中。现在我需要联系父进程从共享内存读取数据并在GUI上打印。我试过信号,管道,信号灯。。。我的问题是。。。我需要联系父进程,我需要让他进入类,其中有一个用于打印GUI输出的方法。如果我使用信号处理程序,就没有机会回到类中(我需要一个共

我有个问题。我目前正在用QT(C++)编写程序,我遇到了这个问题。如果我选中该复选框,它将启动一个方法,其中是implementfork()。父进程一直持续到最后(以保持未冻结的GUI)。子进程在ifinite循环中工作。完成一个序列后,我将必要的数据存储到共享内存中。现在我需要联系父进程从共享内存读取数据并在GUI上打印。我试过信号,管道,信号灯。。。我的问题是。。。我需要联系父进程,我需要让他进入类,其中有一个用于打印GUI输出的方法。如果我使用信号处理程序,就没有机会回到类中(我需要一个共享内存的ID来连接)。我希望我的问题有点让人理解。我需要找到一个解决方案,在那里我可以联系父进程(类似于QT中的connect()),并从类中调用必要的方法。

您可以使用messages(),也可以进行轮询。如果在共享内存中设置了特定偏移量的值,则表示子进程已完成,共享内存中的数据已准备就绪。

解决此问题的方法可能是让GUI在主线程中运行,然后在选中复选框时启动。此QThread可以连续运行,也可以根据需要使用复选框停止和重新启动


一旦该过程完成,如果数据量很小,则可以使用a将数据传输到GUI线程,并且GUI线程上的插槽可以更新显示。如果存在大量数据(如您在问题中所暗示的),请使共享内存对双方都可用(通过将其放在单独的模块中或使用创建QThread对象时创建的指针),并使用共享内存保护对内存的访问。这个QMutex可以在GUI线程中创建,然后在创建它时传递给工作线程。当数据准备好进行处理时,可以从工作线程向GUI线程发送一个线程安全信号,GUI线程中的插槽可以锁定(或tryLock)QMutex,从共享内存中获取数据,然后解锁QMutex(可能还会向工作线程发送一个信号,告诉它继续)。

非常感谢!我像您编写的那样更改了代码(实现QThread而不是fork)。一切都很好!真的再次感谢你!