QObject
それぞれ個別の を含む3 つのオブジェクト (から継承) がありますstd::list
。各オブジェクトはメイン GUI スレッドで作成され (親なし)、独自のスレッドにプッシュされます (Qt を使用QObject::moveToThread()
)。
各スレッドは gui に接続され、メッセージは異なるスレッド間でデータとともに送信されます。各スレッドは、基本的に独自のリストを処理します。例えば:
Obj 1 : データの消費者。使用するリスト (データが存在する場合) の先頭をポップします。また、他のスレッドがデータをプッシュできるように、SLOT も利用できます。このリストに直接アクセスできるオブジェクトは、元の QObject クラスだけです。
オブジェクト 2 : データのプロデューサー。リストにデータをプッシュします。他の人がデータを「ping」するために利用できるSLOTSがあり、リストからデータをポップするSIGNALを発行します。他のオブジェクトは、このリストに直接アクセスできません。
Obj 3: obj 1 のデータを生成し、obj 2 からデータを消費します。obj 1 に送信されたデータと obj 2 からのデータを追跡する独自の内部データ構造を持っていますQwtPlots
。何らかの分析を行います。
Obj の 1 と 2 はリアルタイム クリティカルであり、QueryPerformanceCounter スタイルの「タイミング」を使用します。これにより、実行中にそれぞれ CPU が消費されます。すべてのループを実行QCoreApplication::processEvents()
して、発生するイベントを処理します。
これはクロススレッド データ共有を処理する適切な方法ですか? そうでない場合、穴はどこにあり、どのように修正しますか? これにより、飛び回るデータの「コピー」が大量に作成されることは理解していますが、現時点ではメモリの膨張は問題ではありません。
前もって感謝します :)