FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
estoy hecho un lio
Amigos, días atrás pregunté aquí mismo sobre hilos y con la ayuda de Neftali y los ejemplos que vi aclaré mis dudas y estoy dando mis primeros pasos en este mundo. Ahora bien, estoy teniendo el siguiente problema y se los pongo aquí a ver si me dan una ayuda.
Quiero acceder a unas tablas hechas en Visual FoxPro desde 3 hilos en mi aplicacion, para esto he creado un origen de datos y he usado el controlador Microsoft Visual FoxPro Driver. En Delphi he puesto en un TDataModule un componente TADOConnection y he creado la conexión usando como proveedor Microsoft OLE DB Provider for ODBC Drivers. La cual ha quedado asi: Provider=MSDASQL.1;Persist Security Info=False;Data Source=Tempus;Mode=ReadAhora bien, he puesto 3 componentes TADOQuery en el TDataModule para recuperar la información que necesito de las tablas .dbf. Hice 3 clases derivadas de TThread y puse en el Execute de la primera código que me abre la consulta1 y la informacion la guardo en una tabla paradox, hice algo parecido en el execute del segndo hilo, abro la consulta 2 y guardo la informacion en otra tabla paradox y lo mismo en el hilo3 con la consulta 3 y otra tabla paradox. Hasta aqui al compilar no hay error, pues copié y pegué lo que ya había hecho en el programa anteriormente y que se ejecutaba en el hilo principal antes de pensar en dividir mi aplicación en 3 hilos para agilizar el proceso porque era lógico que si ninguna de estas 3 tareas dependía una de la otra se podían ejecutar en paralelo y aquí es donde se me ha enredado todo. Ahhh quiero decir antes de seguir que todo funciona a la mil maravillas si me olvido de hilos y todo lo pongo en el hilo principal como siempre había hecho en mis modestos programas pero ahora necesito velocidad. Cuando creía que todo estaba bien y ejecuté al parecer no hacía nada, empecé a "debuguear" y me percaté que cuando mandaba abrir las tablas paradox el programa saltaba como si se hubiera producido un error, me dio por poner 3 componentes TSession y creo haber resuelto el problema porque había leído por ahí que cuando se necesitaba acceder simultáneamente a la BDE había que usar sesiones distintas. Luego la aplicación seguía sin funcionar, cuando mandaba abrir una de las ADOQuery el programa volvía a saltar, se me ocurrión marcar en el IDE de Delphi en Tools/Debugger Options/Language Exceptions/ Stop on Delphi Exceptions y me salió el error ... No se ha llamado a CoInitialize. y bueno ya aquí si me he parado porque no se que más hacer. Podría alguien referirme algo que hacer o decirme que me falta, que estoy haciendo mal? Gracias, Damián. |
#2
|
||||
|
||||
Cita:
The CoInitialize function initializes the Component Object Model(COM) library. You must initialize the library before you can call its functions. Applications must call CoInitialize before they make any other COM library calls with two exceptions: the CoGetMalloc function, and memory allocation calls.
Me parece haber leído que los componentes ADO no son Thread-safe, así que para usar hilos deberías añadir tres componentes de conexión si es que estás utilizando TADOConnection. Puedes buscar más infoa al respecto.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
|||
|
|||
Amigo Neftali. Gracias por tu respuesta. Se que tengo que llamar al Coinitialize pero no se dónde exactamente ni cuantas veces llamarlo, será que tengo que llamarlo 1 vez en cada hilo?
Me recomendarías usar algo que sea Thread-safe para acceder a las tablas que quiero??? Gracias. |
#4
|
||||
|
||||
Yo lo que haría es llamarlo en cada hilo para cada conexión. Una vez y listo.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Estoy hecho un lío con las excepciones | noob | Varios | 17 | 14-12-2008 15:29:49 |
Programador pic hecho en delphi | mario2000 | ASM y Microcontroladores | 2 | 27-04-2008 05:05:04 |
Estoy hecho un lio con los codigos de barra. Help!! | escullar | Impresión | 28 | 21-02-2007 03:17:52 |
Firebird, ¿he hecho lo correcto? | kovaski | Firebird e Interbase | 4 | 03-10-2006 21:18:17 |
OCX hecho en VB no lo puedo instalar | miguel_ba75 | Varios | 1 | 02-09-2003 20:50:26 |
|