Compartir la conexión de la base de datos con subprocesos, en lugar de crear nuevos

Quería comprobar esto antes de intentarlo. Estoy trabajando en un par de subprocesos que requieren obtener datos de la base de datos dentro de los subprocesos. Actualmente, basado en todo lo que he visto, estoy creando una nueva conexión de base de datos (TADOConnection) desde dentro de los hilos. Todo funciona bien, excepto que sería genial si pudiera obtener el objeto de conexión desde algún lugar fuera del hilo. Básicamente, no quiero seguir creando una nueva TADOConnection para cada ejecución de hilo.

¿Es posible publicar una propiedad TADOConnection en el exterior del hilo (asignándola así cuando creo el hilo) y luego usar esa conexión dentro del hilo? Todo lo que tendría que hacer entonces es crear el TADODataSet dentro del hilo y asignar su conexión a este TADOConnection. Soy un poco dudoso sobre esto, especialmente porque debo llamar a CoInitialize y CoUninitialize cuando trabajo con ADO en un hilo.

preguntado el 08 de noviembre de 11 a las 18:11

posible duplicado de ¿Es TADOConnection de Delphi seguro para subprocesos? También tú Siempre hay tengo que llamar CoInitialize/CoUnitialize en cada hilo individual que usa COM, ya que COM es específico del contexto del hilo. -

Bueno, ¿importaría si los subprocesos acabaran de crear una TADOConnection y, bueno, simplemente se aferraran a ella durante la ejecución de la aplicación? ¿Necesita crear / destruir continuamente estos hilos? -

Ya tengo mi respuesta: lo que pasa es que estoy creando estos subprocesos según sea necesario, lo que podría significar 10 subprocesos a la vez o 1 subproceso cada media hora. Se liberan, no se mantienen activos, una vez que se completa, ya no me sirve. Solo quería ver si podía evitar crearlo muchas veces. -

Reúna sus subprocesos y hágalos reentrantes para que pueda reutilizarlos en lugar de liberarlos después de cada tarea. -

De hecho, estoy haciendo subprocesos de 2 capas. Tengo un hilo principal, que sí, continúa en un bucle. Pero los otros solo se crean a pedido y nunca son específicamente para un tema. Básicamente, se trata de enviar solicitudes individuales al servidor, esperar una respuesta y luego activar un evento cuando se recibe la respuesta. Una vez que obtengo esa respuesta, ya no la necesito. Cada una de estas solicitudes se envía al servidor desde su propio hilo. Por ejemplo, si necesito 3 números, cada uno tarda mucho en calcular, envío 3 solicitudes al mismo tiempo, generando así 3 hilos. -

1 Respuestas

La respuesta parece no. Porque el TADOConnection (y otros componentes de ADO) están basados ​​en COM, no se pueden pasar a través de subprocesos. Entonces, en este caso, no tengo más remedio que crear un nuevo TADOConnection desde dentro de cada hilo. Los subprocesos que continúan ejecutándose hacen uso de esta conexión cada vez que se repite, pero los subprocesos de ejecución única la utilizan solo una vez.

respondido 11 nov., 11:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.