dll を介して外部ハードウェアと通信するソフトウェアを作成しています (いくつかのモーターを移動し、いくつかの値を読み戻します)。dll への呼び出しがブロックされており、10 秒ほど返されない場合があります。ソフトウェアは、ハードウェアを動かしてスキャンを実行し、読み取りを行い、いくつかのポイントを繰り返します。1 回のスキャンが完了するまでに 30 分程度かかる場合があります。スキャンが実行されている間、GUI が応答し、受信データのライブ グラフ (MDI チャイルド内) が各ポイントで更新されることは明らかです。マルチスレッドは、この問題に対する明白な選択のようです。
私の質問は、これをスレッド化し、メインの VCL スレッドに戻ってスキャン中にグラフを更新する最良の方法は何ですか?
私は現在、「スキャンロジック」を実行する単一の TThread 子孫と、ChildForm の public var セクションに double の配列を持っています。スレッドからこの配列に入力する必要がありますが、Synchronize または CriticalSection または PostMessage またはその他のメソッドを使用するかどうかはわかりません。新しい値が追加されるたびに、メイン VCL スレッドはグラフを更新する必要があります。グローバル変数であるデータの中間オブジェクトが本当に必要であり、Thread と ChildForm から別々に何らかの方法でこれにアクセスする必要がありますか?