gpt4 book ai didi

c++ - 在 OpenMP 循环中调用 QApplication::processEvents()?

转载 作者:行者123 更新时间:2023-11-30 04:36:01 25 4
gpt4 key购买 nike

大家好

在我的 QT 应用程序中,我使用 OpenMP 来并行化循环。在循环中,我想更新当前 QMainWindow 的进度条值。以下代码片段显示了我是如何尝试这样做的:

#ifdef OPENMP_ENABLE
#pragma omp parallel for
#endif

for (int i = 0; i < endIndex; i++) {
getMainWindow()->setProgress(currProg); //change the value of QProgressBar
QApplication::processEvents(); //update events,widgets

//Do some processing
}

这里的 getMainWindow()->SetProgress() 方法只是简单地改变 QMainWindow 的状态栏上附加的 QProgressbar 的值。

在启用 OpenMP 的情况下编译和运行应用程序时,出现以下错误:

ASSERT failure in QCoreApplication::sendEvent: "Cannot send events to objects owned by a different thread. Current thread 161975a0. Receiver 'MainWindowClass' (of type 'MainWindow') was created in thread 13d78f8", file kernel\qcoreapplication.cpp, line 348

关于如何使用 OpenMP 调用 QApplication::processEvents() 有什么技巧吗?

提前致谢。

最佳答案

子类化 QThread 并将您的业务逻辑放在那里并在那里使用 OpenMP。使用信号和槽来更新 QProgressBar。

您只能在主 GUI 线程中调用 GUI 方法。当您在其外部调用 QApplication::processEvents 时,在 OpenMP 线程内,您就违反了这条规则。

关于c++ - 在 OpenMP 循环中调用 QApplication::processEvents()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4825705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com