2009-03-21 3 views

Répondre

15

La réponse courte est non, un ClientDataSet n'est pas thread-safe. La réponse la plus impliquée est que cela dépend de la façon dont vous l'utilisez. Peu importe le nombre de clones de ClientDataSet que vous possédez, ils peuvent être utilisés en toute sécurité à partir de plusieurs threads tant que vous lisez uniquement les données. Cela est vrai même si vous définissez différentes plages, enregistrements en cours, filtres, etc. Et, bien que vous ne l'ayez pas demandé, vous pouvez libérer n'importe lequel des ClientDataSets clonés, même le ClientDataSet original qui a été cloné, sans aucun problème. Par contre, s'il est nécessaire de publier un enregistrement sur l'un des clones ou de recharger les données, vous devez utiliser un objet de synchronisation. Si les modifications sont rares, la classe TMultiReadExclusiveWriteSynchronizer est idéale pour cette utilisation.

4

Le processus de clonage doit être géré avec un TCriticalSection, mais chaque TClientDataSet devrait être bien dans son propre thread.

11

En un mot: Non

Tous les VCL doivent être considérés comme « fil dangereux ». Tous les appels aux composants visuels dans un TThread doivent être effectués dans un événement Synchronize.

Toute classe VCL/RTL doit être créée et entièrement détruite dans un TThread.

Questions connexes