4

私はマルチスレッドの画像処理アプリケーションに取り組んでいます。プログラムを起動したり入力したりするたびに設定ファイルからすべてをロードするのではなく、多くの実験が必要ないくつかのパラメーターを変更する目的で、QTに基づくGUIを追加しました。 GUIを使用して、各スレッドからの基本情報を表示し、それらを監視できるようにします。現在、セットアップされた画像処理スレッド間で情報を渡すスレッドセーフな方法があります。UIにフィードバックを表示できるように、QTスレッドからこの情報の一部をほぼ毎秒ポーリングする方法が必要です。

私の要件は、UIを更新するためにQT固有のコードを画像処理スレッドに組み込む必要がないことです。むしろ、UIスレッドに、スレッド間で情報を渡すために現在使用しているメソッドをポーリングさせたいと思います。コードベースの画像処理部分をスタンドアロンにし、実行するためにQTに依存する必要がないようにします。QT UIを更新するために、グローバルに使用可能な関数をポーリングするにはどうすればよいですか?

4

1 に答える 1

8

QTimerはあなたの友達です。

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), &someQObjectDerivedClassInstance, SLOT(doYourThing()));
timer->start(1000);

または、Qt5およびC ++ 11では、ラムダに直接接続できます。スロットを使用すると、別のスレッドに存在するオブジェクトに接続している場合に備えて、キューに入れられた接続を確実に取得できます。

于 2013-03-21T19:54:57.683 に答える