我们的软件包含C ++ / Qt中的图形用户界面。用户界面在一个单独的库中控制几个繁重的计算算法,该库使用C ++ / OpenMP进行并行化。在这个库中我们不能使用Qt。
为了保持我们的GUI响应,我们使用调用QApplication::processEvents();
的函数指针。这当然会导致意大利面条代码。我们希望将GUI与计算库分开,以便函数调用不再阻止GUI。干净且优先的方法是什么?
答案 0 :(得分:0)
QApplication
启动控制循环,调用GUI方法。当然,任何花费很长时间的方法都会阻塞队列。为防止这种情况,您需要通过fork
/ QThread
生成其他流程/线程。我认为QThread
方法是实现目标的最简洁方法
答案 1 :(得分:0)
如果你不需要中断openMP库调用,那么我会采用一种简单的多线程方法:一个线程处理GUI,另一个线程处理计算库。当然,您不能使用openMP(这对于计算openMP库来说不会很好),但必须使用其他多线程方法。 C ++ 11现在有自己的线程直接支持,所以这就是我要做的。
编辑:阅读Anthony Williams“C ++并发行动”