2011-08-09 12 views
1

QTのグラフィック表示フレームが新しく、ドキュメントやGoogleでこれについて何も見つかりませんでした。別のメインでないスレッドからQGraphicsSceneを更新する

私はいくつかのデータの表現を描画するGUIアプリケーションを持っています。アプリケーション自体は行列/ベクトル(ニューラルネットのもの)で動作し、QGraphicsSceneでそれを表現しなければなりません。これまでのところ良いですが、別のスレッドからQGraphicsSceneを更新しようとすると、アプリケーションsegfaults &が遅かれ早かれクラッシュすることに気付きました。 QT Docsは、スレッドセーフについては何も言わない& Googleは何も与えていない。私が欲しいのは、計算を実行することです。& GUIの表示をそれに応じて更新しますが、GUIのコントロール自体は応答性を保つ必要があります。私が言ったように、私の最初の考えは、別のスレッドですべてを行うことでしたが、私がしようとするとランダムにクラッシュします。

QTでこの種のことを行うための「受け入れられた練習」はありますか、またはグラフィックビューフレームワーク自体でわからないことがいくつかありますか?

答えて

2

Qtドキュメントは実際にはquite a lot about thread safetyと言います。 QGraphicsSceneのドキュメントがスレッドセーフではないため、何も言わない場合は、表示されている動作と一貫しています。

あなたがする必要があるのは、別のスレッドで計算を実行し、そのスレッドをメインのGUIスレッドと適切に同期させることです。これを行う簡単な方法は、計算が表示可能な状態になったらメインスレッドにフラグを設定することです。そうすれば、フラグをチェックするだけで、適時にメインスレッドの適切なQGraphicsSceneメソッドを呼び出すことができます。

+0

ああ、QTドキュメントはそんなことは分かっていません、申し訳ありません。 Kindofはjavadocsに使用されていましたが、通常は明示的に述べていました。とにかく、これを回避する方法を知っていますか? – TC1

+0

答えを更新しました。 2つのスレッドを同期させる必要があります。同じQGraphicsSceneインスタンスが他のスレッドの同じメソッドまたは別のメソッドを実行している間に、一方のスレッドで 'QGraphicsScene'メソッドを呼び出すことができます。可能な大虐殺を考えよう! – Troubadour

+0

注目&受け付けました。 – TC1

関連する問題