私はTThreadの子孫であるクラスを持っています。私は読んだだけの公共財産を持っています。スレッドがアクティブな間にメインスレッドがこれらの値を読み取ると問題に遭遇しますか?メインスレッドからプロパティにアクセスするTThreadの子孫
答えて
TThread子孫自体がそれらを変更することはなく、できるだけ早く初期化することを意味している場合は、すべてが正常になります(スレッドが生存していることを確認し、プロパティ値を要求するたびに蹴ります)。
"読み取り専用プロパティ"によって、TThread子孫がそれらを変更する唯一のものである場合は、メインスレッドが変更されている間にそれらを読み取らないようにする必要があります(ただし、 、整数のように)。
Integer
、Boolean
、Char
、およびPointer
のような基本タイプは、いつでも読むのが安全です。 string
、インタフェース、動的配列などの参照型は、他のスレッドが同時に新しい値を割り当てる可能性がない場合にのみ、読み込みが安全です。たとえば、クリティカルセクションまたはSynchronized
メソッドを使用して、メインスレッドが値を変更していないことを確認します。
読み込んだ値は、使用するまでに古くなっている可能性があることを覚えておく必要があります。スレッドは、読み込んだときから使用するまでの間に新しい値を書き込んでいる可能性があります。
私はそれが "同期"と呼ばれると信じています(最後にDはありません) –
これは、プロパティの種類によって、場合によってはアクセサメソッドによって異なります。
type
TMyThread = class(TThread)
private
FIntfield: integer;
public
property IntField: integer read FIntField;
end;
32ビット値へのアクセスはアトミックな操作であるため、このプロパティへのアクセスは問題にはなりません。しかし、プロパティが32ビットより大きい場合、またはメインスレッドがアクセスする間に変更される可能性のあるクラス参照の場合、問題が発生します。
- 1. .NETのTimers.Timerからメインスレッドにアクセスする
- 2. 子フォームから孫のフォームにアクセスしようとすると、Microsoft Accessランタイムエラー2455
- 3. 子孫サブクラスでSwiftプロパティをオーバーライド
- 4. アクセスの子プロパティ
- 5. VB.NET WinForms - BackgroundWorkerのスレッドからメインスレッドのオブジェクトにアクセスするには?
- 6. C#、親参照から子プロパティにアクセスする?
- 7. SalesforceとSOQL:祖父母から孫のオブジェクトにアクセスする
- 8. 子孫LINQからXMLを抽出
- 9. メインスレッドのオブジェクトに別のスレッドからアクセスする方法は?
- 10. 最初の子の子孫
- 11. 親コントロールからWPFの子孫にデータを渡す方法
- 12. CSS子孫セレクタ
- 13. Dojoクエリー・子孫?
- 14. c#子孫のXML
- 15. スカラXML:子孫vs子
- 16. .NETフォームをHWNDに子孫化する
- 17. usercontrolからmasterpageプロパティにアクセスする
- 18. スレッドからForm1プロパティにアクセスする
- 19. Javaからbuild.xmlプロパティにアクセス
- 20. Jqueryのクローンの子孫
- 21. のLINQ - ルートの子孫
- 22. jQueryすべての子孫から一度にCSSクラスを削除する
- 23. 子孫のアンダーリストリストを検索する
- 24. 拡張リストビューの子孫をカスタマイズする
- 25. divの子孫をクローンするJquery UI
- 26. ムービークリップの子孫ActionScript 3
- 27. TMemoオブジェクトの子孫は
- 28. jQuery prependTo $(this)の子孫クラス
- 29. 子孫型へのキャスト
- 30. jqueryオブジェクトの直接の子孫にきれいにアクセスするにはどうすればよいですか?
完璧な回答!正確に私が必要とした情報。私はTThread子孫の内部から値を更新していますが、すべての値がアトミックではありません。あなたの答えをありがとう。 –
であり、コードが32ビットで整列されていない場合は、整数などの「原子」値さえも失敗する可能性があります。 –
Indyには、IdThreadSafeInt64やTIdThreadSafeBooleanを含むCore \ IdThreadSafe.pasのいくつかの原子データ型が含まれています – mjn