Mit einem Wort: Nein.
Alle VCL sollten als "Thread unsafe" betrachtet werden. Alle Aufrufe von visuellen Komponenten in einem TThread sollten in einem Synchronize-Ereignis ausgeführt werden.
Jede VCL / RTL-Klasse sollte vollständig innerhalb eines TThread erstellt und zerstört werden.
Der Klonprozess sollte mit einem TCriticalSection behandelt werden, aber jedes TClientDataSet sollte in seinem eigenen Thread in Ordnung sein.
Die kurze Antwort ist nein, ein ClientDataSet ist nicht Thread-sicher. Die umstrittenere Antwort ist, dass es davon abhängt, wie Sie es verwenden. Unabhängig davon, wie viele Clones des ClientDataSets Sie haben, können sie sicher aus mehreren Threads verwendet werden, solange Sie nur die Daten lesen. Dies gilt auch dann, wenn Sie unterschiedliche Bereiche, aktuelle Datensätze, Filter usw. festlegen.
Und obwohl Sie nicht danach gefragt haben, können Sie alle geklonten ClientDataSets, auch das ursprüngliche ClientDataSet, das geklont wurde, ohne Probleme freigeben.
Wenn es andererseits erforderlich ist, jemals einen Datensatz an einen der Klone zu senden oder die Daten neu zu laden, müssen Sie ein Synchronisationsobjekt verwenden. Wenn die Änderungen selten sind, ist die TMultiReadExclusiveWriteSynchronizer-Klasse ideal für diesen Zweck.
Die kurze Antwort ist nein, ein ClientDataSet ist nicht Thread-sicher. Die umstrittenere Antwort ist, dass es davon abhängt, wie Sie es verwenden. Unabhängig davon, wie viele Clones des ClientDataSets Sie haben, können sie sicher aus mehreren Threads verwendet werden, solange Sie nur die Daten lesen. Dies gilt auch dann, wenn Sie unterschiedliche Bereiche, aktuelle Datensätze, Filter usw. festlegen.
Und obwohl Sie nicht danach gefragt haben, können Sie alle geklonten ClientDataSets, auch das ursprüngliche ClientDataSet, das geklont wurde, ohne Probleme freigeben.
Wenn es andererseits erforderlich ist, jemals einen Datensatz an einen der Klone zu senden oder die Daten neu zu laden, müssen Sie ein Synchronisationsobjekt verwenden. Wenn die Änderungen selten sind, ist die TMultiReadExclusiveWriteSynchronizer-Klasse ideal für diesen Zweck.
Mit einem Wort: Nein.
Alle VCL sollten als "Thread unsafe" betrachtet werden. Alle Aufrufe von visuellen Komponenten in einem TThread sollten in einem Synchronize-Ereignis ausgeführt werden.
Jede VCL / RTL-Klasse sollte vollständig innerhalb eines TThread erstellt und zerstört werden.
Der Klonprozess sollte mit einem TCriticalSection behandelt werden, aber jedes TClientDataSet sollte in seinem eigenen Thread in Ordnung sein.
Tags und Links delphi tclientdataset