2

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

为了保持我们的 GUI 响应,我们使用调用QApplication::processEvents();. 这当然会导致意大利面条代码。我们希望将 GUI 与计算库分开,以便函数调用不再阻塞 GUI。什么是干净和首选的方式来做到这一点?

4

2 回答 2

0

QApplication启动控制循环,它调用 GUI 方法。自然,任何耗时的方法都会阻塞队列。为了防止这种情况,您需要通过fork/生成额外的进程/线程QThread。我认为这种QThread方法将是实现目标的最干净的方法

于 2012-09-24T15:00:49.213 回答
0

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

编辑:阅读 Anthony Williams “C++ concurrency in action”

于 2012-09-24T15:03:25.430 回答