如何将响应式Qt GUI与基于OpenMP的计算库相结合?

时间:2012-09-24 14:40:22

标签: c++ qt user-interface openmp

我们的软件包含C ++ / Qt中的图形用户界面。用户界面在一个单独的库中控制几个繁重的计算算法,该库使用C ++ / OpenMP进行并行化。在这个库中我们不能使用Qt。

为了保持我们的GUI响应,我们使用调用QApplication::processEvents();的函数指针。这当然会导致意大利面条代码。我们希望将GUI与计算库分开,以便函数调用不再阻止GUI。干净且优先的方法是什么?

2 个答案:

答案 0 :(得分:0)

QApplication启动控制循环,调用GUI方法。当然,任何花费很长时间的方法都会阻塞队列。为防止这种情况,您需要通过fork / QThread生成其他流程/线程。我认为QThread方法是实现目标的最简洁方法

答案 1 :(得分:0)

如果你不需要中断openMP库调用,那么我会采用一种简单的多线程方法:一个线程处理GUI,另一个线程处理计算库。当然,您不能使用openMP(这对于计算openMP库来说不会很好),但必须使用其他多线程方法。 C ++ 11现在有自己的线程直接支持,所以这就是我要做的。

编辑:阅读Anthony Williams“C ++并发行动”