FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Programacion con Threads
Buenos Dias mis estimados, espero que puedan colaborarme a detectar cual es el problema que estoy presentando, les comento, estoy haciendo un programa para envio de correos masivos usando Indy para conexiones HTTP->post a unos servidores con apache para que hagan el envio de los respectivos correos. Por esta parte estoy muy bien, el problema que presento es que requiero hacer simultaneamente el envio de los correos con 20 procesos (hilos) y que se mantenga constante 20 procesos enviando las peticiones de Indy, basicamente esto lo estoy logrando, el problema radica en que necesito mostrar el log de operaciones de cada peticion en un control memo del formulario principal y por alguna razon los hilos no terminan su ejecucion, entiendo que debo usar Syncronize para evitar conflicto de acceso entre los hilos pero no se si lo estoy utilizando correctamente y necesita ayuda es con esto, les anexo el codigo en cuestion:
Esta es la clase Thread
Aqui la porcion de codigo donde genero los hilos: FrmP es el Formulario Principal y LstInbox y LstEmail son ListBox con la lista de correos electronicos.
AThreads es un Array de THTTPThread dinamico y basicamente controla la cantidad de thread a generar, y MaxThreads la cantidad maxima permitida a generar. Espero que puedan ayudarme, al menos comprender porque la aplicacion se cuelga y los hilos nunca terminan que basicamente es el problema que presento. Saludos. |
#2
|
||||
|
||||
No puedo probarlo ahora, pero a primeras te recomendaría lo siguiente.
No accedas desde dentro del Thread directamente a objetos del formulario y tampoco al formulario.
Esos accesos a FrmP (que imagino es el formulario) eliminalos. Crea 2 propiedades en el thread para pasar esas lista de valores y al crearlo se los pasas.
Dentro del thread ya puedes usar estas listas, en lugar de acceder al FrmP.
__________________
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
|
|||
|
|||
Gracias Neftali por tu respuesta.
Ya por la premura pude corregir el problema, aunque no como yo quería realmente. Ya pude al menos hacer que la aplicación ejecute cierta cantidad de threads "casi" concurrentes (entiendo que son hilos y no procesos concurrentes). Lo que no pude hacer es poder tener acceso a cada thread y poder saber cuando una finalizo para reutilizar la misma variable (o espacio en el arreglo dinámico), estaba usando un arreglo dinámico probando con un numero fijo de 20. Les anexo el código: La Clase Thread, creo que la visibilidad es importante
y este es el bloque de codigo donde se usa: Es importante usar Application.ProcessMessages mientras el proceso principal duerme. Espero que para algun otro les sirva de ayuda |
#4
|
|||
|
|||
Hola rmendoza83
El problema que veo en tu código es que que por cada email que envías creas y destruye el hilo, te pongo aquí un ejemplo de como puedes realizar una lectura sincronizada con las listas, espero te pueda servir
como peculiaridad del ejemplo le paso al hilo un puntero a una función que es la encargada de leer el email de la lista y que hay que llamar siempre con el synchronize. Espero te pueda servir Un saludo |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Threads en unit | Ramsay | Varios | 12 | 14-04-2016 15:59:31 |
manejo de threads ... | anubis | Lazarus, FreePascal, Kylix, etc. | 20 | 22-04-2015 00:31:12 |
Aclaracion de threads | JULIPO | Varios | 4 | 10-12-2012 16:33:37 |
uso de threads | JULIPO | API de Windows | 2 | 25-07-2007 16:09:06 |
Threads in DLL's | Gianni | Varios | 0 | 20-07-2007 22:18:23 |
|