Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #5  
Antiguo 20-10-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 15
danielmj Va por buen camino
Hola ecfisa, saludos

mira..

Declaración del hilo...
Código Delphi [-]
...
private
{ Private declarations }
Thread: TStopStartThread;
WaitThread: TWaitThread;
UntilFlag: TEvent;
...

hago la llamada al hilo...
Código Delphi [-]
Procedure TPrincipal.Button1Click(Sender: TObject);
begin
  Thread.MsgWaitFor(CortarArchivo(labEdit1.Text,2048), nil); //---> Aquí me da el error o uno de los que posiblemente me vaya a dar.
  //CortarArchivo(labEdit1.Text,2048); --> esta linea esta operativa en este momento ya que el hilo  lo tengo "anulado" por no correr.
end;

Procedimiento "CortarArchivo"...
Código Delphi [-]
procedure CortarArchivo(sArchivo: TFileName; iLongitudTrozo: Long64 );
var
  i: Word;
  FS, Stream: TFileStream;
  nombreFile: String;

  label iniciar;

begin
  try
    principal.memo1.Lines.Add(CalcHash(principal.labedit1.Text,haSHA1));
    principal.Memo1.Lines.SaveToFile(principal.labEdit2.Text+ '\'+ extractFileName(principal.LabEdit1.Text+'.crc'));
  except
    on EFCreateError do
      begin
        showMessage ('Unidad seleccionada no válida. Selecciona una unidad' +
        chr(13)+'de disco duro local que sea accesible.');
        principal.Memo1.Text:= '';
        exit;
      end;
  end;

    if principal.opc1.Checked then
    begin
      iLongitudTrozo:= 1048576;        //1MB  --> los tamaños se muestran en Mbytes
      //sArchivo:= principal.LabEdit2.Text;

      FS := TFileStream.Create(sArchivo, fmOpenRead or fmShareDenyWrite);
    try
      principal.Memo2.Lines.Add((Chr(13))+(Chr(10)));
      principal.Memo2.Lines.Add('LISTADO DE ARCHIVOS [ORIGINAL CORTADO]');
      principal.Memo2.Lines.Add((Chr(13))+(Chr(10))+'·································');

      for i := 1 to Trunc( FS.Size / iLongitudTrozo ) + 1 do
      begin
        principal.prBar.Max:= FS.Size div iLongitudTrozo;
        principal.prBar.Position:= i;
        principal.prBar.Refresh;

        nombreFile:= extractFileName(sArchivo);
        try
          sArchivoPartido := ChangeFileExt(principal.labEdit2.Text +'\'+
          nombreFile, '.' + FormatFloat('000', i ) );
          Stream := TFileStream.Create(sArchivoPartido, fmCreate or fmShareExclusive);
        except
        on EFileStreamError do
        ShowMessage ('Unidad seleccionada no valida. Selecciona una unidad de disco duro local.');

        end;
          principal.labEdit2.SelStart:= 0;
          principal.labEdit2.SelLength:= length(principal.labEdit2.Text);
        if (principal.labEdit2.SelLength) = 3 then
            principal.Memo2.Lines.Append(principal.labEdit2.Text + extractFileName(sArchivoPartido))
        else
          principal.Memo2.Lines.Append(principal.labEdit2.Text+'\'+extractFileName(sArchivoPartido));

      try
        if fs.Size - fs.Position < iLongitudTrozo then
          iLongitudTrozo := FS.Size - FS.Position;
          Stream.CopyFrom( FS, iLongitudTrozo );
      finally
        Stream.Free;
      end;
  end;
  finally
  FS.Free;
  principal.Button1.Enabled:= false;

  principal.Memo2.Lines.Add((Chr(13))+ (chr(10)));
  principal.Memo2.Lines.Add('Archivo original: '+principal.LabEdit1.Text);
  principal.memo2.Lines.Add('Ruta destino: '+principal.labEdit2.Text);
  principal.Memo2.Lines.Add('Código HASH: '+principal.Memo1.Text);

  end;
    if principal.prBar.Max = principal.prBar.Position then
    principal.Timer1.Enabled:= true;
    Principal.lblTerminado.Visible:= true;
end;
...
    if principal.opc1.Checked then
    begin
      iLongitudTrozo:= 16106127360;        //15GB
      FS := TFileStream.Create( sArchivo, fmOpenRead or fmShareDenyWrite);
    try
      Principal.Label6.Caption:= IntToStr((FS.Size div iLongitudTrozo) +1);
      principal.Label6.Refresh;

      principal.Memo2.Lines.Add((Chr(13))+(Chr(10)));
      principal.Memo2.Lines.Add('LISTADO DE ARCHIVOS [ORIGINAL CORTADO');
      principal.Memo2.Lines.Add((Chr(13))+(Chr(10))+'·································');

      for i := 1 to Trunc( FS.Size / iLongitudTrozo ) + 1 do
      begin

        principal.prBar.Max:= Round((FS.Size / iLongitudTrozo));
        principal.prBar.Position:= i;
        principal.prBar.Refresh;

        sArchivoPartido := ChangeFileExt(principal.labEdit2.Text +'\'+
        nombreFile, '.' + FormatFloat('000', i ) );
        Stream := TFileStream.Create(sArchivoPartido, fmCreate or fmShareExclusive);

        principal.labEdit2.SelStart:= 0;
        principal.labEdit2.SelLength:= length(principal.labEdit2.Text);
        if (principal.labEdit2.SelLength) = 3 then
            principal.Memo2.Lines.Append(principal.labEdit2.Text + extractFileName(sArchivoPartido))
        else
          principal.Memo2.Lines.Append(principal.labEdit2.Text+'\'+extractFileName(sArchivoPartido));
      try
        if fs.Size - fs.Position < iLongitudTrozo then
          iLongitudTrozo := FS.Size - FS.Position;
          Stream.CopyFrom( FS, iLongitudTrozo);
      finally
        Stream.Free;
      end;
  end;
  finally
  FS.Free;
  principal.Button1.Enabled:= false;

  principal.Memo2.Lines.Add((Chr(13))+ (chr(10)));
  principal.Memo2.Lines.Add('Archivo original: '+principal.LabEdit1.Text);
  principal.memo2.Lines.Add('Ruta destino: '+principal.labEdit2.Text);
  principal.Memo2.Lines.Add('Código HASH: '+principal.Memo1.Text);
  end;
    if principal.prBar.Max = principal.prBar.Position then
    principal.Timer1.Enabled:= true;
    Principal.lblTerminado.Visible:= true;
  end;
end;

Así está ahora mismo, ¿alguna sugerencia?
Una cosa, no seais muy duros con el código que estoy verdecillo ya sé que habra mil formas de hacerlo mas claro y limpio pero todo a su tiempo. De momento funciona que no es poco jajaj.

P.D.: El ejemplo que uso de hilo es de la web "crea tu software" y no sé si será valido en mi caso.

Saludos y gracias.

Última edición por danielmj fecha: 20-10-2013 a las 23:25:31. Razón: error al copiar
Responder Con Cita
 



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
Pasar cadena de conexion a tadoconnections dentro de un hilo de ejecucion richy08 OOP 4 02-08-2010 23:49:32
como crear un hilo de ejecucion ayudenme plis!!! jazmin OOP 4 21-06-2010 09:55:13
cuando llamo ejecutar un hilo dentro del proceso del hilo no lo hace robertosc Varios 1 14-08-2007 22:11:09
Dudas Crear Objetos en Tiempo de Ejecución Deiv OOP 9 09-08-2007 01:13:15
Parar un hilo de ejecución deivi Varios 6 21-11-2006 13:36:49


La franja horaria es GMT +2. Ahora son las 22:00:01.


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