Synchronize ※マルチスレッド初心者です

解決


AY  2021-09-20 06:33:47  No: 149843  IP: [192.*.*.*]

サブスレッド側で、スレッド処理失敗時の通知モーダルダイアログを表示するのですが、メインスレッドの特定の処理中(確認ダイアログモーダル表示中など)は避ける必要があります。
この場合、下記のような実装でも、問題ないのでしょうか?
※マルチスレッド初心者です。フラグ(gErrDspOK)の判定をすり抜けるというようなことはないと考えてよいのでしょうか?

<メインスレッド>
・・・・・
gErrDspOK = False;
特定の処理
gErrDspOK = True;
・・・・・

<サブスレッド>
・・・・
Synchronize(aaa);

private TXXX.aaa;
begin
  if gErrDspOK = True then begin
      BBB.ShowModal;
  end;
end;

編集 削除
HFUKUSHI  2021-09-21 03:53:12  No: 149844  IP: [192.*.*.*]

TThread.Synchronize https://docwiki.embarcadero.com/Libraries/Alexandria/ja/System.Classes.TThread.Synchronize に渡したメソッド、プロシージャのコードは、メインスレッドに同期して実行されます。つまり
| gErrDspOK = False;
| gErrDspOK = True;
|   if gErrDspOK = True then begin
はいずれもメインスレッド上の動作になりますから、競合状態となることはありません。

編集 削除
AY  2021-09-21 12:30:25  No: 149845  IP: [192.*.*.*]

ありがとうございます。助かりました。

編集 削除