0

私は現在、測定デバイス用にセットアップする必要がある Qt GUI を扱っています。このデバイスは、ライン カメラから画像を非常に高速に取得するフレーム グラバー カードを使用しています。それほど複雑ではない私の画像処理は完了するのに 0.2ms かかり、QCustomPlot で信号と処理結果を表示するのに約 40ms かかりますが、まったく問題ありません。GUI 出力の他に、処理された信号は NI DAQ デバイスによってアナログ信号として出力されます。

私の問題は、一定の周波数でアナログ信号を更新し、それでも時々 GUI を更新する必要があることです。

私の現在のアプローチまたはアイデアは、データ プール スレッドと 2 つのワーカー スレッドを作成することでした。1 つのワーカー スレッドがフレーム グラバーからデータを受け取り、それを処理してデータ プールを更新します。2 番目のワーカー スレッドは、NI DAQ デバイスのクロックによって与えられる約 2 ~ 5kHz の特定の周波数で、NI DAQ のアナログ チャンネルを更新します。また、GUI スレッドは時々データ プールを読み取り、信号表示を約 20 ~ 30Hz のレートで更新します。

Qt スレッド管理とシグナル アンド スロット メカニズムを使用したかったのは、その「シンプルさ」と、Qt およびそのスレッド クラスと組み合わせてスレッドを既に使用していたためです。

誰かがアイデアや提案を持っていますか?スレッドのタイミングで問題が発生する可能性はありますか?

さらに、マルチコア CPU 上の 1 つの単一 CPU コアに 1 つのスレッドを割り当てて、このコアがこの単一スレッドのみを処理することは可能ですか?

4

2 に答える 2

0

誰かがアイデアや提案を持っていますか?スレッドのタイミングで問題が発生する可能性はありますか?

Signal/Slot メカニズムは問題ありません。試してみてください。パフォーマンスの問題が発生した場合でも、別のアプローチを見つけることができます。QAbstractVideoSurface と Mediaplayer でのリアルタイム ビデオ処理に Signal/Slot Mechanism を使用しました。それは私のために働いた。

さらに、マルチコア CPU 上の 1 つの単一 CPU コアに 1 つのスレッドを割り当てて、このコアがこの単一スレッドのみを処理することは可能ですか?

どうしてそうするか?オペレーティング システムまたはスレッド ライブラリには、このような処理を行うスケジューラがあります。自分でこれを行う正当な理由がない限り、既存の方法をそのまま使用する必要があります。

于 2015-06-07T19:38:40.120 に答える
0

1) UI スレッド、2) グラブ アンド プロセス スレッド、3) アナログ出力スレッドの 3 つのスレッドで試してみます。

トリックは、トリプル バッファーを使用して、グラブ アンド プロセスの出力をアナログ出力の入力に接続することです。

の時点tで、thread(2) が の処理を​​終了し、すぐにframe[(t+0)%3]出力先を に変更し、 のデータをループしている thread(3) に適切なタイミングで切り替えるように通知します。frame[(t+1)%3]frame[(t+2)%3]frame[(t+0)%3]

10fps の処理フレーム レートと 60fps の NTSC 出力フレーム レートを持つ画像処理プロジェクトに取り組んでいたときに、この手法を使用しました。をなくすにはtearing effect、3 つのバッファを持つ循環バッファが最小です。

于 2015-06-07T23:46:03.140 に答える