1

現在、既存のVCLアプリケーションの新機能を開発しています。このアプリケーションは、TeeChartと呼ばれるサードパーティのパッケージを使用してチャートと静止画像を作成します。静止画像チャートを作成するために200万のデータポイントをロードしなければならない場合が1つあります。ただし、これには読み込みに時間がかかり、ユーザーはアプリケーションが完了するまでアプリケーションで何もできません。したがって、GUIがフリーズしないように、データポイントを処理するためのワーカースレッドを作成することをお勧めします。

このメソッドsetData()は、次のメンバー変数を設定します。これらのメンバー変数は、VCLコンポーネントが続行し、チャートの作成に使用します。

// Holds the Y position for the image (columns)
DynamicArray<double>* mpda_XValues;

// Holds the colour for the corresponding element in the x and y
// position
DynamicArray<double>* mpda_YValues;

// Holds the z position for the image (rows)
DynamicArray<double>* mpda_ZValues;

ワーカースレッドを作成するときに考慮すべきことは何ですか?

すべてのデータ処理が1つのメソッドで行われる場合、boostを使用してスレッドを作成するにはどうすればよいsetData(){...}ですか?

4

2 に答える 2

2

VCLを使用しているので、TThreadクラスを確認することをお勧めします。これから継承されたクラスを作成し、メインスレッドと通信するときにSynchronizeメソッドを使用します。http://docwiki.embarcadero.com/VCL/en/Classes.TThreadおよびhttp://docwiki.embarcadero.com/RADStudio/en/Defining_Thread_Objectsをご覧ください。

于 2010-01-12T14:58:24.313 に答える
1

明らかにブースト スレッドライブラリを見たいと思うでしょう。

これは(おそらく)あなたが思っているよりも複雑です。副作用のある同期関数を非同期関数に変換するのは簡単ではありません。考慮すべき事項:

  • setData の呼び出し元は、関数が戻ったときに行われていない「設定」操作を処理できますか?
  • シャットダウン中にバックグラウンドで setData 操作が行われている場合、その操作をどのように保証しますか?
  • 競合状態を引き起こさないように、GUI スレッドと setData スレッド間の共有状態をどのように処理しますか?
  • バックグラウンドの setData が完了したときに GUI スレッドが更新 (または何かを実行) できるように、「通知」メカニズムが必要ですか?
  • バックグラウンドで setData 操作が保留されている間に誰かが setData を呼び出すとどうなりますか?
于 2010-01-12T06:25:09.233 に答える