グリーティングすべて、OpenMPループ内でQApplication :: processEvents()を呼び出す?
私の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のではQApplication ::のprocessEvents()を呼び出す方法を
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を使用してアプリケーションを実行するには有効にすると
、それは次のエラーを与えますか?
ありがとうございます。
はそれを試して得た: エラーC3034:OpenMPの「一」ディレクティブは、直接指示 –
'(OMP_GET_THREAD_NUM(もし「の並列」内にネストすることはできません)== 0) 'の代わりに' single 'ディレクティブを使用することもできます。しかし、それは非常にきれいではありません。 –