Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-05-2012
Avatar de javier7ar
javier7ar javier7ar is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 124
Poder: 19
javier7ar Va por buen camino
pero si eso que tenes ya es multithread! cada instancia que creas de esta clase es un thread; si creas 5 instancias vas a tener 5 threads!
lo unico que te faltaria es tener 5 barras de progreso, y alguna forma de decir que barra corresponde a que thread.
Cuando digo 5, pueden ser los que quieras
Si no es eso a lo que te referis, escribi un ejemplo de lo que necesitas, asi te podemos ayudar mejor
Saludos
Responder Con Cita
  #2  
Antiguo 11-05-2012
angelp4492 angelp4492 is offline
Miembro
 
Registrado: dic 2007
Posts: 99
Poder: 0
angelp4492 cantidad desconocida en este momento
Cita:
Empezado por javier7ar Ver Mensaje
pero si eso que tenes ya es multithread! cada instancia que creas de esta clase es un thread; si creas 5 instancias vas a tener 5 threads!
lo unico que te faltaria es tener 5 barras de progreso, y alguna forma de decir que barra corresponde a que thread.
Cuando digo 5, pueden ser los que quieras
Si no es eso a lo que te referis, escribi un ejemplo de lo que necesitas, asi te podemos ayudar mejor
Saludos

Si a eso exactamente me refiero, tengo una barra de progreso y cuando lanzo 5 thread todos me muestran los datos en la misma barra, y no se como poner los datos en sus correspondientes barras.
Responder Con Cita
  #3  
Antiguo 14-05-2012
Avatar de javier7ar
javier7ar javier7ar is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 124
Poder: 19
javier7ar Va por buen camino
y tendrias que identificar cada thread, por ejemplo mandandole un nro cuando lo creas, entonces despues cuando el thread llama a actualizar el progressbar pasa su nro por parametro y el Form1 en base al nro que recibe actualiza uno u otro progressbar.
Seria algo asi:
Código Delphi [-]
constructor TIdHTTPThread.Create(sFUrl : AnsiString; destino : AnsiString; Proxy :Boolean; sProxyport : Int64; sProxyserver:AnsiString ; sTID:integer; Nro:Integer);
begin
  inherited Create(false);
  FreeOnTerminate := True;
  FNro:=Nro;
...
y cuando llamas a actualizar la barra de progreso:
Código Delphi [-]
// y aca cambias esto:
Form1.UpdateProgressbar(posProgress,maxProgress);
// por esto:
Form1.UpdateProgressbar(posProgress,maxProgress,FNro);
y en el procedimiento UpdateProgressbar te fijas en el nro que te pasan por parametro y actualizas la barra que corresponde
Espero se entienda
Saludos
Responder Con Cita
  #4  
Antiguo 15-05-2012
angelp4492 angelp4492 is offline
Miembro
 
Registrado: dic 2007
Posts: 99
Poder: 0
angelp4492 cantidad desconocida en este momento
Siguiendo unos ejemplos que hay por la red y cambiando la forma que el thread manda información, usando WM_USER, me he creado una clase para controlor el thread.

En la recepción del mensaje del thread tengo esto.

Código Delphi [-]
Procedure Tform1.HTTPClientDownloadBeginWork(var Msg:TMessage);
    var
        uniqueid_: integer;
        totalbytes_: integer;
        i: integer;
    begin
        uniqueid_ := Msg.wparam;
        totalbytes_ := Msg.LParam;

        i := IndexOfDownloadableFile(uniqueid_);
        if i <> -1 then
        begin

           //ShowMessage(IntToStr(totalbytes_));
           form1.ProgressBar1.Position:=0;
           form1.ProgressBar1.Max:=totalbytes_;
           TTransferFile(DownloadList[i]).BytesDownloaded := TTransferFile(DownloadList[i]).BytesPreviouslyDownloaded;
           TTransferFile(DownloadList[i]).TotalFileSize := TTransferFile(DownloadList[i]).BytesPreviouslyDownloaded + totalbytes_;
           //TDownloadFile(DownloadaList[i]).State := si_Downloading_Animation1;
           TTransferFile(DownloadList[i]).ProgressBar.Position := 0;
           TTransferFile(DownloadList[i]).ProgressBar.Max := TTransferFile(downloadlist[i]).TotalFileSize;
           ListviewTransfer.Repaint;

        end;
    end;

donde TTransferfile y Tdownload file son clases para manejar la descarga y downloadlist una variable de tipo objectlist. el progressbar lo creo de esta manera.

Código Delphi [-]

procedure TTransferFile.addToView;
var
  RectProg: TRect;
begin
item := ListView.items.add;
item.Caption := Url;
Item.SubItems.Add('0 kb/s');
Item.SubItems.Add('');


//if es_descarga then Item.ImageIndex := 9
//else Item.ImageIndex := 10;
ProgressBar := TsProgressBar.Create(nil);
Item.Data := ProgressBar;
RectProg := Item.DisplayRect(drBounds);
RectProg.Left := RectProg.Left + ListView.Columns[0].Width;
RectProg.Right := RectProg.Left + ListView.Columns[1].Width;
ProgressBar.BoundsRect := RectProg;
progressBar.Parent := ListView;

end;
.

En totalbytes_ tengo el tamaño del fichero en bytes, el progressbar1 componente normal me lo acepta si problemas cuando pongo form1.progressbar1.max=totalbytes_

El problema que tengo es en esta linea

TTransferFile(DownloadList[i]).ProgressBar.Max := TTransferFile(downloadlist[i]).TotalFileSize;

me sale un error que solo acepta entre 0 y 65536. Alguna Idea.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Duda en Sockets MultiThread JesusRamirez Internet 3 21-08-2010 06:54:13
componente MultiFileDownloader multithread para bajar http y ftp en indy 10 softx2009 Internet 3 18-01-2010 16:17:47


La franja horaria es GMT +2. Ahora son las 20:38:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi