FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
TIdFTP list dentro de Thread
Buenos dias delphinianos, os traigo una duda que ni San Google ni el buscador de estos foros me ha conseguido resolver.
Tengo un TThread, que alberga un IdFTP, al que llamo desde el hilo principal para hacer un List de los archivos remotos. El problema surge en que, al hacer el List, me da un error de Access Violation, el cual haciendo el mismo proceso desde el main thread no me salta, pero no consigo averiguar por qué / como solucionarlo. Ahi va el código: La llamada:
El create del hilo:
El proceso que trabaja realmente. Se le llama desde el Execute según el modo (intento aprovechar el mismo hilo para hacer descargas en otro punto del programa, para eso el modo y el create sobreescrito)
Cabe destacar que es mi segundo TThread, aún estoy aprendiendo a manejarlos y es probable que tenga algo mal planteado y no me de cuenta. Un saludo, y gracias de "hantevraso" por vuestra ayuda |
#2
|
||||
|
||||
Segun veo el primer Parámetro del procedure List del componente FTP debería estar instanciado(osea creado) al momento de usarlo.
En tu caso es tu variable "listaArchivos"... Mi pregunta es ¿en qué parte del código estás instanciado dicha variable? o mejor dicho la variable "lista" que le asignas a la variable "listaArchivos" en tu constructor CreateLista ¿dónde la creas? o que és? Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Última edición por rgstuamigo fecha: 10-02-2011 a las 17:11:14. |
#3
|
||||
|
||||
A mi me faltan un par de cosas que tienes en el Create; Hay una variable carpeta y un evento OnWork; El segundo supongo que está definido en el Thread y la primera no se de dónde sale.
¿Cómo y dónde llamas al método ListarArchivos? ¿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. |
#4
|
||||
|
||||
La variable Carpeta la quité por limpiarlo un poco para vosotros, la uso para un FTP.ChangeDir que ahora mismo tenía comentado, si me quedó algún resto por ahi no lo tengais en cuenta.
listaArchivos lo asigno en el Create a la lista que viene por parámetros, la cual viene inicializada desde el hilo principal (SlVersionesDescargables). Edito el primer post para quitar el Carpeta (que vendría desde el hilo principal por parámetro). Pues no, no lo edito que ya no me deja, pero bueno, esa linea consideradla comentada. A ListarArchivos lo llamo desde Execute:
El OnWork en este caso no deberia afectar, pero aqui lo teneis
Última edición por eflosten fecha: 10-02-2011 a las 17:06:12. |
#5
|
||||
|
||||
Cita:
Entiendo que no es una variable interna al Thread, por lo tanto deberías acceder a ellas dentro de un Synchronize (creo). Otra opción es que crees una interna y al final asignes los valores. Creo que ahí puede estar el problema. Como bien dices, si el OnWok es interno, no debería afectar.
__________________
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
|
||||
|
||||
Lo que me llama la atención es que si pongo este código en el lugar donde creo el hilo, funciona perfectamente:
Vamos, que es alguna historia dentro del hilo. Voy a poneros el código del TThread completo, a ver si es alguna metedura de pata que no consigo ver en la propia creación del hilo (repito que es el 2º hilo que programo, estoy muy pez aún en ese tema).
Edit: Neftali, el problema no es con la variable en sí, porque puedo acceder a ella desde el hilo sin problemas, e incluso FTP.List sin parámetros tambien me falla. Edit 2: He probado a tratarlo directamente sobre un TSTringList local a la función, y me da el mismo error. Me llama la atención que SIEMPRE el access violation es a la misma direccion de memoria: 00000250 Última edición por eflosten fecha: 10-02-2011 a las 18:22:24. |
#7
|
||||
|
||||
Pues yo he probado más o menos como lo tienes y me funciona.
Un par de cosas. (1) en la llamada no utilices Execute (porque si no lo estás lanzando en el hilo principal), debes utilizar Resume. (2) He cambiado los parámetros del evento OnWork, porque en XE han cambiado (Integer por Int64).
__________________
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. |
#8
|
||||
|
||||
Ahora que mencionas el XE, no especifiqué con qué versión estoy trabajando:
Delphi 2007 con el Indy de serie. Puede ser algun bug del propio Indy? Por que si no no lo entiendo... Gracias por el tip, usaré Resume a partir de ahora |
#9
|
||||
|
||||
He conseguido aislar mejor el error, resulta que, aunque la exception la tira en el FTP.List, el error viene desde el constructor del modo lista.
Si hago FTP.List llamandolo desde el CreateDescarga, funciona perfecto. Tengo mal implementado o algun error en el doble constructor para que uno funcione bien y el otro no? |
#10
|
||||
|
||||
Vale, ya he localizado el error...
El proceso List del FTP hace saltar el evento OnWork, el cual en mi caso actualiza el estado de la ProgressBar Barra, la cual se asigna en CreateDescarga, pero no en CreateLista, de ahi el access violation. Tema resuelto, un saludo y gracias |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Llamada a Procedimiento Almacenado desde dentro de un Thread | MontarazAE | MS SQL Server | 2 | 29-05-2007 17:46:34 |
Mover posiciones dentro de un list Box | creus | Varios | 13 | 04-11-2006 18:03:44 |
Thread bendito thread...se me pierde la ventana | Seba.F1 | API de Windows | 5 | 02-02-2006 00:16:30 |
Conocer la posición de un Thread dentro del Listado de ActiveThreads del IdTCPServer | R_Richards | Internet | 2 | 05-02-2005 23:07:38 |
TidFTP | MaGNa | Internet | 0 | 10-01-2005 14:00:10 |
|