2016-05-12 3 views
0

別のスレッドがオブジェクトをDelphiで使用できる間に、オブジェクトをスレッドに安全に配置する方法はありますか? お読みになる予定のアイデアや記事はありますか?他のスレッドがオブジェクトをDelphiで使用できる間に、オブジェクトをスレッドに安全に配置する方法はありますか?

+1

絶対にアクセスできないオブジェクトを解放しないでください。決して。 –

答えて

7

安全に処分するには、他のスレッドがオブジェクトを使用していないことを確認する必要があります。

オブジェクトへのすべてのアクセスを、クリティカルセクションやミューテックスなどのロックでラップします。

または、オブジェクトを参照カウントにする。各スレッドは、オブジェクトの操作中にrefcountをインクリメントし、終了するとそれを減らします。次に、refcountを0に減らした後にオブジェクトを破棄することができます。のDelphi interfaceを実装したクラスを作成することは、この目的のために非常にうまく動作し、大量の作業を自動的に行います。

+0

TInterfacedObjectのサンプルコードはありますか? – qgi

+0

私はリンク先のドキュメントに例があります。 –

+0

@qgi OmniThreadLibraryに関するサンプルを読んでください。コレクションや他のほとんどすべてのプリミティブは、マルチスレッド化のために作られたARCオブジェクトとまったく同じです。また、COMインターフェイスを介してWord/Excelで作業することについての記事も読んでください。これらのインターフェイスは、マルチスレッドプログラムの設計を公開しないものの、Delphi ARCオブジェクトにもマップされています。 –

関連する問題