10

スレッド 1 で管理される TClientDataset があります。

別のスレッドに、TClientDataset の複製されたイメージがあります。

スレッドの問題が発生しますか?

編集

複製されたイメージは読み取り専用モードで使用されます。

4

3 に答える 3

17

簡単に言えばいいえです。ClientDataSet はスレッド セーフではありません。より複雑な答えは、使用方法に依存するということです。ClientDataSet のクローンがいくつあっても、データを読み取るだけであれば、複数のスレッドから安全に使用できます。これは、異なる範囲、現在のレコード、フィルターなどを設定している場合でも当てはまります。

また、これについては質問していませんが、複製された ClientDataSet はすべて、複製された元の ClientDataSet であっても問題なく解放できます。

一方、いずれかのクローンにレコードをポストしたり、データをリロードしたりする必要がある場合は、同期オブジェクトを使用する必要があります。変更がめったにない場合は、TMultiReadExclusiveWriteSynchronizer クラスをこの目的に使用するのに最適です。

于 2009-07-10T22:39:12.987 に答える
12

一言で言えば:いいえ。

すべての VCL は「スレッドが安全でない」と見なす必要があります。TThread 内のビジュアル コンポーネントへの呼び出しは、Synchronize イベントで行う必要があります。

VCL/RTL クラスは、すべて TThread 内で作成および破棄する必要があります。

于 2009-03-21T15:52:24.627 に答える
5

クローン プロセスは TCriticalSection で処理する必要がありますが、各 TClientDataSet は独自のスレッドで適切に処理する必要があります。

于 2009-03-21T13:52:44.977 に答える