A ver, lo que quiero hacer lo pondré con un ejemplo.
Tengo mi web donde en un directorio tengo varios ficheros (100)
entonces quiero descargar estos ficheros a mi pc, vale, esto lo hago con las indy, hasta aquí todo correcto a excepción de que se congela cuando está bajando uno y otro fichero, entonces la solución ? Threads..
Usé un thread para este trabajo, resultó todo bien como quería.. mando a hacer al thread todo el trabajo pesado y la app sin cogelarse ni nada, como la seda..
Peeeero ahora se me a ocurrido bajarme estos ficheros en varios threads (la cantidad configurable por el usuario)
Supongamos que el ususario pone 10 threads, entonces la carga se dividirá entre los 10 threads, osea, cada threads bajará 10 ficheros y los 10 threads estarán bajando simultaneamente.
Esto igual lo he logrado de casi igual manera que cuando tenía un solo thread.
Cuando tenía un solo thread:
ThreadDownload := TThreadDownload.Create(Memo1, 10);
Y ahora si quiero crear 10:
for i := 0 to 9 do begin Memo1.Lines.Append('Lanzamos thread # ' + IntToStr(i)); ThreadDownload := TThreadDownload.Create(Memo1, 10); Memo1.Lines.Append('ThreadID: ' + IntToStr(ThreadDownload.ThreadID)); Memo1.Lines.Append('Haldle: ' + IntToStr(ThreadDownload.Handle)); TThreadList end;
(Por cierto, eso de ThreadID y Handle lo puse para ver que era lo que hacía, por curioso, pensé que de alguna forma podía dirigirme a un thread con esos datos, pero no sé hacerlo en el caso de que sería así)
Bueno, hasta aquí todo correcto, lanza los 10 threads al instante y todos hacen su tarea..
Peeeero aquí el problema, que qué pasa si ahora quiero cancelar/pausar/reanudar todos los threads?
Cómo me dirigiría a ellos ?
Si antes lo hacía ThreadDownload.suspended .resume .terminate
Ahora cómo lo hago ?
Como podrán ver mi thread se crea con 2 parámetros, uno donde envío un memo para que pueda escribir el thread un log, para ver lo que pasa y que está descargando.. y el otro número, en este caso el número desde el que empezará a bajar el fichero, suponiendo que los fichero están en el servidor con el nombre de fichero0.rar fichero1.rar, etc (Esto para hacer más fácil entender el ejemplo)
Bueno, esa es mi pregunta, quiero poder tener el control de caa uno de los threads, saber cuando terminó cada uno, etc
Ya he visto muchos ejemplos, incluidos los de neftali que ahí crea igual que yo los threads, en un for.
Otra cosa.. si cada thread que crearía tendría un nombre diferente si se podría dirigirse a el, como este ejemplo:
for i := 0 to 9 do begin Memo1.Lines.Append('Lanzamos thread # ' + IntToStr(i)); ThreadDownload + inttostr(1) := TThreadDownload.Create(Memo1, 10); TThreadList end;
ya se que esto ThreadDownload + inttostr(1) está mal, pero es un ejemplo nada mas de que si podría hacer esto podría dirigirme a cada threads por su nombre, pero no creo que esto sea lo correcto.
Espero que me hayan entendido y me haya explicado de forma clara.
Me gustaría si es que me dan la solución me pongan un pequeño ejemplo de como implementarlo, que es más intuitivo.
Desde ya muchas gracias a todo el que quiera colaborar con mi problema!
PD : He visto que se podría usar Tlist o TThreadList, si esto es así, ¿cómo podría usarlo? Si no sirve esto, olviden esta línea xD