2009-03-21 16 views

Respuesta

15

La respuesta corta es no, un ClientDataSet no es seguro para subprocesos. La respuesta más complicada es que depende de cómo la use. No importa cuántos clones del ClientDataSet tenga, son seguros de usar desde múltiples hilos siempre que solo esté leyendo los datos. Esto es cierto incluso si está configurando diferentes rangos, registros actuales, filtros, etc.

Y, aunque usted no preguntó sobre esto, puede liberar cualquiera de los ClientDataSet clonados, incluso el ClientDataSet original que fue clonado, sin problemas.

Por otro lado, si alguna vez es necesario publicar un registro en cualquiera de los clones o volver a cargar los datos, debe usar un objeto de sincronización. Si los cambios son raros, la clase TMultiReadExclusiveWriteSynchronizer es excelente para usar para este fin.

4

El proceso de clonación debe manejarse con una TCriticalSection, pero cada TClientDataSet debe estar bien en su propio hilo.

11

En una palabra: No.

Todo el VCL deben ser considerados "hilo inseguro". Cualquier llamada a componentes visuales en un TThread debe hacerse en un evento Synchronize.

Cualquier clase VCL/RTL debe crearse y destruirse completamente dentro de TThread.

Cuestiones relacionadas