2

当社のソフトウェアは、C++/Qt のグラフィカル ユーザー インターフェイスで構成されています。ユーザー インターフェイスは、並列化に C++/OpenMP を使用する別のライブラリで、いくつかの重い計算アルゴリズムを制御します。このライブラリでは Qt を使用できません。

GUI の応答性を維持するために、 を呼び出す関数ポインタを使用しますQApplication::processEvents();。もちろん、これはスパゲッティコードにつながります。関数呼び出しが GUI をブロックしないように、GUI を計算ライブラリから分離したいと考えています。これを行うためのクリーンで好ましい方法は何ですか?

4

2 に答える 2

0

openMP ライブラリの呼び出しを中断する必要がない場合は、単純なマルチスレッド アプローチを採用します。1 つのスレッドが GUI を処理し、別のスレッドが計算ライブラリを処理します。当然、これに openMP を使用することはできません (これは計算 OpenMP ライブラリではうまくいきません) が、他のマルチスレッド方式を使用する必要があります。C++11 には独自のスレッドの直接サポートが付属しているので、私ならそうします。

編集: Anthony Williams の「C++ concurrency in action」を読んでください。

于 2012-09-24T15:03:25.430 に答える
0

QApplicationGUI メソッドを呼び出す制御ループを起動します。当然、時間がかかるメソッドはキューをブロックします。forkこれを防ぐには、 /を介して追加のプロセス/スレッドを生成する必要がありますQThread。このQThreadアプローチは、目標を達成するための最もクリーンな方法だと思います

于 2012-09-24T15:00:49.213 に答える