hola amigos:
En una aplicación se me esta demorando un poco el proceso de escaneo (extraer TXT) e inserción de ficheros, tengo un procedimiento que escanea una carpeta y va extrayendo todo el contenido txt y luego inserto los ficheros en una base de datos. necesito me recomienden como puedo implementra hilos de ejecucion en ese caso y en que lugar seria la mejor forma de hacerlo.
Código Delphi
[-] procedure TForm2.RastreaDir(dir: string);
var
FileSearch: TSearchRec;
R: integer;
s: string;
begin
ChDir(dir);
if FindFirst('*.*', FaDirectory, FileSearch) = 0 then
repeat
if ((FileSearch.Attr and FaDirectory) = FaDirectory) then
begin
application.ProcessMessages;
if (FileSearch.Name <> '.') and (FileSearch.Name <> '..') then
RastreaDir(dir + '\' + FileSearch.Name);
end
else
begin
application.ProcessMessages;
if cancelando then Exit;
PCarpeta.Progress := PCarpeta.Progress + 1;PCarpeta.Refresh;
LFichero.Caption := FileSearch.Name; LFichero.Refresh;
s := CaminoCompleto(dir + '\' + FileSearch.Name);
if DataModule1.ExisteFichero(FileSearch.Name, s) then
begin
if smessagedlg('Organizador Electrónico',
'El fichero ' + FileSearch.Name +
' existe en la base de datos desea sobreescribirlo ? ',
mtInformation, [mbYes, mbno], 1) = mrYes then
AgregaFichero(dir + '\' + FileSearch.Name);
end
else
AgregaFichero(dir + '\' + FileSearch.Name);
end;
if cancelando then Exit;
until FindNext(FileSearch) <> 0;
FindClose(FileSearch);
end;
procedure TForm2.AgregaFichero(n: string);
var
File1: TFileStream;
q: Tsqlquery;
pag, s: string;
idcarpeta, idfichero, idpadre: integer;
PosS: integer;
ins: boolean;
begin
if not cancelando then
begin
Memo1.Lines.Clear;
lEjecuta.Caption := 'Extrallendo texto...'; lEjecuta.Refresh;
LFichero.Caption := 'Fichero: ' + ExtractFileName(n); LFichero.Refresh;
LCarpeta.Caption := rightstr(ExtractFilePath(n), Length(ExtractFilePath(n)) - Length(CarpetaRaiz)); LCarpeta.Refresh;
application.ProcessMessages;
idcarpeta := InsertaCarpetas(n);
if idcarpeta <> -1 then
begin
try
ExtraeTexto(n, pag);
except
Memo1.Lines.Clear;
pag:='1';
end;
InsertaFichero(n, idfichero); InsertaNombre(n, pag, idfichero, idcarpeta, ''); end;
end;
LiberarMemoria;end;
quisiera saber que sugerencia me dan y en que lugar se debiera implementar.
gracias juan