サブスレッド側で、スレッド処理失敗時の通知モーダルダイアログを表示するのですが、メインスレッドの特定の処理中(確認ダイアログモーダル表示中など)は避ける必要があります。
この場合、下記のような実装でも、問題ないのでしょうか?
※マルチスレッド初心者です。フラグ(gErrDspOK)の判定をすり抜けるというようなことはないと考えてよいのでしょうか?
<メインスレッド>
・・・・・
gErrDspOK = False;
特定の処理
gErrDspOK = True;
・・・・・
<サブスレッド>
・・・・
Synchronize(aaa);
private TXXX.aaa;
begin
if gErrDspOK = True then begin
BBB.ShowModal;
end;
end;
TThread.Synchronize https://docwiki.embarcadero.com/Libraries/Alexandria/ja/System.Classes.TThread.Synchronize に渡したメソッド、プロシージャのコードは、メインスレッドに同期して実行されます。つまり
| gErrDspOK = False;
| gErrDspOK = True;
| if gErrDspOK = True then begin
はいずれもメインスレッド上の動作になりますから、競合状態となることはありません。
ありがとうございます。助かりました。
ツイート | ![]() |