Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-11-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 27
eduarcol Va por buen camino
pues entonces si es verdad lo que investigue

otra solucion que he rebuscado es lo siguiente, en la unit tengo el objeto del formulario y el hilo, si comparto una variable global alli puedo compartir la informacion entre los dos objetos.

Solo queria asegurarme si mi resultados eran correctos porq nunca he trabajado con hilos
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #2  
Antiguo 09-11-2007
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Poder: 21
xEsk Va por buen camino
Editado: veo que ya te han propuesto una solución parecida a esta... Ops! :P


Si realmente necesitas llamar el execute con parámetros, entonces emula el exeute con un proceso tuyo, con lo cual sí podrás pasarle parámetros...

Ejemplo:

Código Delphi [-]
// variable declarada en la sección private de la classe TMiThread
FnIdx: Integer;

// implementación de tu propio execute
procedure TMiThread.MiExecute(nIdx: integer);
begin
  FnIdx:=nIdx;
  Execute;
end;

// implementación del execute
procedure TMiThread.Execute;
begin
  if FnIdx then
    // bla bla bla!
end;

El código puede tener alguna errata, porqué lo he hecho de memoria sin probarlo xD Pero seguro que entiendes la idea xD

Saludos.

Última edición por xEsk fecha: 09-11-2007 a las 21:54:05.
Responder Con Cita
  #3  
Antiguo 09-11-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 27
eduarcol Va por buen camino
gracias Xesk, estaba pensando en algo similar. He quedado en algo como esto:

Código Delphi [-]
unit unPricipal;

***

type

  //Hilo que compara los MD5 de los archivos
  TCompararMd5 = class(TThread)
     protected
        procedure Execute; override;
  end;

  //Formulario de soporte visual
  TfrActualizador = class(TForm)
    ***
  private
    { Private declarations }
    ***
  public
    { Public declarations }
    ***
  end; 

var
  nIdx: Integer;

//Compara los MD5 del archivo local y web y devuelve true o false
procedure TCompararMd5.Execute;
var
   aStream: TMemoryStream;
   cLocal: String;
   cWeb: TStringList;
   nIndice: Integer;
begin
   inherited;
   //Toma el MD5 del archivo local
   nIndice := nIdx; //Toma el valor de nIdx para que al ejecutarse otro hilo asegurarse que continua el mismo valor
   aStream := TMemoryStream.Create;
   cWeb    := TStringList.Create;
   try
      cLocal := AnsiUpperCase(MD5Sum(cRutaLocal.Strings[nIndice] + '\' + cArchivo.Strings[nindice]));
      if (Get(cHtml.Strings[nIndice] + '/pMd5.php?archivo=' + cArchivo.Strings[nIndice], aStream)) and (cLocal <> '') then
      begin
         aStream.Position:= 0; // <-- Hay que rebobinar el stream :-D
         cWeb.LoadFromStream(aStream);
         cWeb.Strings[0] := AnsiupperCase(cWeb.Strings[0]);
         //Compara el md5 del local con el web
         Resultado := cLocal = cWeb.Strings[0];
      end
      else
         Resultado := False;
   finally
      FreeandNil(aStream);
      FreeandNil(cWeb);
   end;
end;

*****

//Procedimiento donde se crea y se llama el hilo
procedure TfrActualizador.pActualizar(nIndice: Integer);
var
   cUrl, cRuta: String;
   thcMd5: TCompararMd5;
begin
   //Crea el hilo para comparar los MD5
   thcMd5 := TCompararMd5.Create(True);
   nIdx := nIndice;
   thcMd5.Resume;
   //Actualiza el sistema desde internet
   if not Resultado then
   begin
      //Descargar el archivo de la web
      cUrl := cHtml.Strings[nIndice] + '/' + cArchivo.Strings[nIndice];
      cRuta := cRutaLocal.Strings[nIndice] + '\' + cArchivo.Strings[nIndice];
      Bajar(cUrl, cRuta);
   end;
end;

******

end.
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #4  
Antiguo 09-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Código Delphi [-]
var
  nIdx: Integer;

¿no debería ser así?:
Código Delphi [-]
threadvar  // ojito a la palabra reservada de delphi.
  nIdx: Integer;

Si es una variable que va a usarse dentro de un Thread, debe ser ThreadSafe.

Aunque no veo el asunto claro. Estas creando una clase TCompararMd5 que a partir de un índice abre un archivo. ¿no sería mejor crear una propiedad en el Thread llamada Filename? así no se comparte información entre el hilo y su padre, además nos permitiría reusar la clase sin modificarla.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 09-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
No termino de comprender si nIdx debe compartir su valor entre los diferentes hilos o no, mejor revisa tú mismo si debe ser threadvar o no.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 09-11-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 27
eduarcol Va por buen camino
Disculpa la demora pero estaba revisando la ayuda acerca de threadvar y si es lo que necesito, muchisimas gracias
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Tthread Vs. Application -> ProcessMessages(); Peterman Varios 8 31-05-2007 03:05:03
TThread y cerrar una ventana previamente abierta gluglu OOP 1 14-05-2007 19:19:54
Execute Immediate jjarias Firebird e Interbase 3 27-04-2006 15:14:07
Como Liberar un Tthread???? AGAG4 Varios 3 25-04-2005 22:16:40
Lio con TThread diegofhernando Varios 0 20-01-2004 17:58:35


La franja horaria es GMT +2. Ahora son las 22:26:09.


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