6

スレッドが Delphi の VCL コントロールから情報を非同期的に読み取る場合、スレッド セーフですか?

例えば。

procedure TMyThread.Execute;
var bOK:Boolean; 
    iOK:Integer;
begin
   while not terminated do
   begin
      bOk:=MyForm.cbCheckBox.Checked;
      iOK:=MyForm.Left;
      sleep(20);
   end;
end;

スレッドセーフでない場合、チェックボックスのプロパティが変更されたときにイベントをキャッチするにはどうすればよいですか。

4

1 に答える 1

11

いいえ、安全ではありません。あなたのコードは、ウィンドウ ハンドルが間違ったスレッドへのアフィニティで作成される可能性があります。

GUI を使用してアプリケーションの状態を保存しないでください。GUI を使用して、その状態のビューを表示します。ビューから状態を分離すると、家に帰って乾きます。ワーカー スレッドは、GUI に触れることなく、基になる状態 state を使用できます。

于 2013-01-06T10:40:53.667 に答える