Threads x Funções recursivas

Delphi

11/11/2003

Pessoal, estou tendo o seguinte problema:

Fiz um programa que utiliza alguns processos demorados, então criei uma thread para ele, dentro da minha thread eu chamo uma função, nesta função existem alguns códigos e chamadas p/outras funções, uma destas funções é recursiva. Em uma simulação que eu fiz rodando a função principal fora da thread, o programa levou em torno de 10 segundos p/me apresentar o resultado, com a thread ele parece ter se perdido lá dentro. Detalhe, se eu chamo funções normais funciona legal, apenas a thread com função recursiva está dando problema, alguém sabe o que pode estar acontecendo e tem uma solução ou dica para este problema?

Att,

PhenomenoM


Phenomenom

Phenomenom

Curtidas 0

Respostas

Vanius

Vanius

11/11/2003

Como utilizo threads?
Vc pode me enviar um exemplo?

grato,

Vanius Girodo
vaniusg@terra.com.br


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

11/11/2003

Colega,

Coloca um fragmento do código pra gente avaliar melhor.


GOSTEI 0
Phenomenom

Phenomenom

11/11/2003

Eu criei uma thread com o nome ´suiteThread´ em uma unit para threads à parte.

No evento onclick do meu programa eu coloquei o seguinte código:

begin
suiteThread.FreeOnTerminate:= true;
suiteThread.Resume;
end;

Dentro da unit de threads no ´execute´ coloquei o código para roda uma função:

var
quantidadesuite:integer;
begin
QuantidadeSuite:=ExportacaoForm.fnExportarSuite;
end;

Se a função executasse apenas o código normal como as outras threads que criei, funcionaria normal, mas dentro desta função é chamada outra função, ou melhor, uma procedure e esta é recursiva, o código da procedure é este:

procedure GetAllFiles(mask: string);
var
search: TSearchRec;
directory: string;
begin
directory := ExtractFilePath(mask);

if FindFirst(mask, $23, search) = 0 then
begin
repeat
Form1.ListBox1.Items.Add(directory + search.Name);
Inc(Count);
until FindNext(search) <> 0;
end;

if FindFirst(directory + ´*.*´, faDirectory, search) = 0 then
begin
repeat
if ((search.Attr and faDirectory) = faDirectory) and (search.Name[1] <> ´.´) then
GetAllFiles(directory + search.Name + ´\´ + ExtractFileName(mask));
until FindNext(search) <> 0;
FindClose(search);
end;
end;


Eu notei que se comentar a chamada da procedure dentro dela mesma, o programa chega no final.


GOSTEI 0
POSTAR