FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Firebird con Threads
Hola a todos. Estoy últimando una aplicación multihilo tipo servidor de ficheros.
Todo marcha bien al arrancar cada hilo de ejecución. La secuencia es la siguiente: crea basedatos, crea tabla, crea transacion, ejecuta selectsql y devuelve el resultado. Cuando arranca un segundo hilo y el primer hilo no ha acabado, este segundo hilo se congela, justo en una de estas sentencias database.connected := true, transaction.starttransaction, tabla.active := true indistintamente. Es decir que cuando hago algún movimiento efectivo sobre firebird 1.5 el segundo hilo se cuelga, bueno la verdad es que se cuelgan todos los hilos. He probado de todo, con variables de tipo FList, cambiando los componentes de los ibx a los UIB( decían en internet que estos eran los únicos thread-safe que existen ), cambiando el firebird 1.5 de superserver a classic y nunca he conseguido ningún resultado, siempre la congelación. He leído algunos hilos del foro hablando del tema pero sin dar ninguna solución viable. Si alguien puede dar alguna pista se agradecería. Un saludo |
#2
|
||||
|
||||
Hola
Pregunto: No sera que firebird necesita hacer un Commit o un Commitretained para que se cierre la tabla ?. Saludos
__________________
Siempre Novato |
#3
|
||||
|
||||
Hola compañero Jack!
Primero, supongo que estás utilizando un componente de conexión, llamese TDatabase, distinto para cada hilo y en mejor manera, una copia para cada hilo de cada componente utilizado en la conexión. Si es así, entonces el problema está en la biblioteca cliente de Firebird (fbclient.dll). Tengo entendido que esta biblioteca no soporta multi hilos hasta la versión 2.5 de Firebird. Si es posible, intenta hacer tus pruebas con una versión más reciente de la biblioteca cliente o en última instancia, con una versión más reciente del servidor Firebird. Saludos, Chirs |
#4
|
||||
|
||||
Yo trabajo con múltiples Thread's en FB 2.1 sin problemas.
Tienes que asegurarte 100% de que tanto el TIBDatabase, como TIBTransaction y los TIBDataSet que utilices sean UNICOS e independientes para cada Thread. Se deben de crear en cada Thread que vayas a utilizar y se deben de liberar igualmente en cada Thread.
__________________
Piensa siempre en positivo ! |
#5
|
|||
|
|||
Gracias a todos por responder.
Cambie la base de datos a la versión 2.5 y comprobé con varios tipos de modos de transacción. Obtuve los mismos resultados. Para gluglu: he hecho exactamente lo que tu dices y lo único que he logrado es que se cuelgue la primer hilo y que arranque el segundo pero nunca los dos a la vez. Te agradecería un poco mas de información de como lo has podido resolver. Gracias de antemano. Un saludo. Jack |
#6
|
||||
|
||||
Por lo que indicas, no haga nada diferente a lo que tu haces, al menos en referencia a crear y eliminar, tanto la BBDD como la transacción como las tablas a utilizar dentro del Thread.
También debes de considerar otro tema muy importante : No puedes hacer ninguna operación con estos componentes que afecten a algo externo al Thread, m explico, no puedes intentar actualizar algo en pantalla o utilizar un dato obtenido en el thread con estos componentes, si no es a través del método Syncronize. Indícame por favor cómo devuelves los datos que has obtenido dentro del Thread a tu aplicación principal, y a ver si podemos aclarar algo más.
__________________
Piensa siempre en positivo ! |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
threads en dbExpress | pborges36 | Conexión con bases de datos | 5 | 21-12-2010 16:18:47 |
Firebird AND Threads | Abel Garcia | Firebird e Interbase | 21 | 19-03-2008 05:07:21 |
uso de threads | JULIPO | API de Windows | 2 | 25-07-2007 16:09:06 |
Bloqueo Ibx Firebird AND threads | Abel Garcia | Firebird e Interbase | 3 | 26-02-2007 14:02:27 |
|