Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como evitar que mis aplicaciones se "cuelguen" (https://www.clubdelphi.com/foros/showthread.php?t=56514)

Gaim2205 20-05-2008 00:59:47

Como evitar que mis aplicaciones se "cuelguen"
 
Trabajo con delphi 7. La mayoría de las aplicaciones que tengo que programar acceden a servidores y/o equipos remotos. Al ejecutar algun query un poco "grande" o no se.... al copiar un achivo con CopyFile de un directorio remoto a otro, mis aplicaciones se "cuelgan" mientras trabajan y ésto le da al usuario la impresión de que ha habido algun fallo.

Hay alguna forma de evitar esto? Gracias por su ayuda....

cHackAll 20-05-2008 01:04:38

Revisa éste hilo.

paladincubano 20-05-2008 12:48:43

Para evitar eso. Usa como bien te dicen el

Application.ProcessMessage;

Ahora, cuando usas el CopyFile, si son muchos ficheros en un ciclo, pones esa instruccion dentro del ciclo y puedes hasta usar un progressBar, peroooooooo, si el archivo es muy grande, veras la misma sensacion de cuelgue porque dentro del Procedimiento CopyFile no hacen ese procedimiento. Para evitar eso creo que deberias hacer tu mismo un copyfile, hay miles de ejemplo de como copiar ficheros uno mismo. (Para mi es mejor porque lo controlo todo desde el mismo programa y manejo mucho mejor el progressbar)
Suerte.

Gaim2205 20-05-2008 15:54:39

así lo hice
 
Sacado de las páginas de Torry

Código Delphi [-]
procedure TForm1.Cargar(Source, Destination: string);
var
  FromF, ToF: file of byte;
  Buffer: array[0..4096] of char;
  NumRead: integer;
  FileLength: longint;
begin
  AssignFile(FromF, Source);
  reset(FromF);
  AssignFile(ToF, Destination);
  rewrite(ToF);
  FileLength := FileSize(FromF);
  with Progressbar1 do
  begin
    Min := 0;
    Max := FileLength;
    while FileLength > 0 do
    begin
      BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead);
      FileLength := FileLength - NumRead;
      BlockWrite(ToF, Buffer[0], NumRead);
      Position := Position + NumRead;
    end;
    CloseFile(FromF);
    CloseFile(ToF);
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  Cargar('c:\Windows\Welcome.exe', 'c:\temp\Welcome.exe');
end;

paladincubano 20-05-2008 17:08:12

No esta mal, pero hay metodos muchos mejores utilizando los Streams. Creo yo.

Gaim2205 21-05-2008 16:11:53

Pues compártelos.

xEsk 21-05-2008 16:21:30

Yo para tareas tediosas, que se que van a tardar un buen rato, suelo programarlas en un thread independiente, y luego advierto al usuario que se esta trabajando y debe esperar... Pero como la aplicación no esta "detenida" ya no da la sensación de que este colgada... y de paso le metes algún progress bar de estos infinitos (circulares).

Saludos.


La franja horaria es GMT +2. Ahora son las 10:40:13.

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