FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
EAccessViolation usando Hilos
Hola compañeros:
Tengo un pequeño problemilla. Estoy creando un pequeño programa que en una de las partes crea un hilo que debe ser ejecutado para no quedar bloqueado por otro proceso, el problema es que cuando me ejecuta el hilo me da el siguiente error: Debugger Exception Notification Project Servicio.exe raised exception class EAccessViolation with message ' Access violation at Address 004E8B49 in module 'Servicio.exe'. Read of addres 00000667'. Para poder estudiarlo mejor he incluido un botón que me crea el hilo en lugar de ser otros procesos quienes me lo creen y he descubierto que si lo que ejecuto es un "Showmessage" la cosa va bien pero si otro objeto me da el error en esa línea como si no estuviera creado. El código es el siguiente:
Es la primera vez que inicio un hilo en el foro así que espero no haberme saltado nada de la guía de estilo, si es así por favor disculpen y comentenme lo que sea. Muchas gracias por su tiempo y paciencia. |
#2
|
||||
|
||||
Debes tener en cuenta de a qué cosas accedes desde dentro del hilo.
Si accesdes a elementos externos al hilo, debes hacerlo desde el Synchronize.
__________________
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
|
|||
|
|||
Hola Neftali:
Ante todo muchas gracias por tu pronta respuesta. Con ella, más los dos ejemplos que ví en tu web las cosas me han quedado más claras. Corrígeme si me equivoco. Puedo: O incluir el Memo en la declaración del Thread:
O usar la función Synchronize para ejecutar la acción:
O definir la función UpdateProgress como perteneciente a Ventana_Principal y ejecutar:
Muchas gracias por tu ayuda, estoy ansioso por probarlo mañana a primera hora . Saludos Última edición por Thoronluin fecha: 10-05-2010 a las 23:43:03. Razón: Corrección |
#4
|
|||
|
|||
He probado las tres cosas pero ninguna funcionó. Lo unico que parece que me elimina el error es modicar el código comos sigue:
Pero en ese caso cada vez que se ejecute la línea:
Se me crearía una nueva instancia, el problema ahora es, que las antiguas si no las he liberado posiblemente me estén ahí consumiendo recursos ¿Me equivoco?. En el ejemplo he puesto un botón pero esas líneas de código las va a llamar un execute de un TIdTCPserver, ejecutandose muchas veces durante la vida del programa. Saludos. |
#5
|
||||
|
||||
Cita:
Puedes definir el memo propiedad (pública) del Thread, por ejemplo, o pasarlo como parámetro en el Create (redefiniendolo). Cuando crees el Thread o después, si lo creas suspendido, asignas el memo del programa principal a tu propiedad del thread. Luego puedes accederlo. Luego, desde el thread, no debes acceder al memo del programa principal:
Si no al memo del Thread.
__________________
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. |
#6
|
|||
|
|||
Muchísimas gracias por la respuesta y por la velocidad de ésta. Voy a intentarlo así, ya te contaré.
Saludos |
#7
|
|||
|
|||
Lo he probado, funciona genial, muchísimas gracias por todo.
Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
EAccessViolation | Alejandrina | OOP | 3 | 05-08-2008 16:02:09 |
EAccessViolation | elorza | Varios | 2 | 26-12-2007 11:07:32 |
Error EAccessViolation | chele | Firebird e Interbase | 0 | 09-11-2004 16:51:21 |
EAccessViolation | Ester | Varios | 16 | 10-09-2004 16:33:20 |
Error EAccessViolation.... | JorgeBec | Conexión con bases de datos | 5 | 18-02-2004 22:34:11 |
|