Boa tarde

pelo que entendi você está com threads armazenados em variáveis ne? e tenta
acessar uma determinada propriedade dela.
até ai normal. só assim que thread terminar, você não pode mais acessar a
propriedade pois o objeto foi destruído, e não adianta testar o assigned
pois a variável vai ter um endereço informado (endereço não válido), e irá
retorna true, sendo que o objeto não existe.

O que você precisa fazer?

2008/10/31 Elazar Dornelles Ceza <[EMAIL PROTECTED]>

>   Boa tarde pessoal
>
> encontrei um problema ao usar threads, gostaria da sugestão dos colegas,
> pra esplicar direito, estou colocando abaixo uma serie de passos que
> utilizei, e em seguida vem a minha pergunta...rsss
>
> Tenho 4 variaveis para instanciar threads, como no exemplo.
>
> TMinhaThread = class(TThread)
> private
> FId : Integer;
> public
> procedure Execute; override;
> property Id : Integer read FId write FId;
> end;
>
> vThread1 : TMinhaThread;
> vThread2 : TMinhaThread;
> vThread3 : TMinhaThread;
> vThread4 : TMinhaThread;
>
> ...
> em determinado momento eu crio estas threads com o suspend e
> FreeOnTerminate em true, e em seguida faco chamada ao metodo resume
>
> vThread1 := TMinhaThread.Create(True);
> vThread2 := TMinhaThread.Create(True);
> vThread3 := TMinhaThread.Create(True);
> vThread4 := TMinhaThread.Create(True);
>
> vThread1.Id := 1;
> vThread2.Id := 2;
> vThread3.Id := 3;
> vThread4.Id := 4;
>
> vThread1.FreeOnTerminate := True;
> vThread2.FreeOnTerminate := True;
> vThread3.FreeOnTerminate := True;
> vThread4.FreeOnTerminate := True;
>
> vThread1.Resume;
> vThread2.Resume;
> vThread3.Resume;
> vThread4.Resume;
>
> tomo os devidos cuidados no execute para que verifique e saia do loop caso
> a thread tenha sido terminada.
>
> procedure TMinhaThread.Execute;
> begin
> override;
> ...
> while... and not Terminated do begin
> ...
> end;
> end;
>
> Mas ao fechar o sistema eu estou usando...
> ShowMessage( IntToStr(vThread1.id)); e esta funcionando. (exibindo a
> mensagem na tela)
>
> Minhas perguntas.
>
> Usando o free on terminate, porque não ocorreu um access violation ao
> chamar thread.id?
> Isto quer dizer que a thread ainda esta rodando? (veriquei o evento,
> OnThreadTerminate...e ele esta sendo executado pra cada uma das 4).
> Porque usando um Assigned(vThread1) por exemplo....retorna True?(isto no ao
> fechar o sistema).
>
> Desculpe pelo longo texto.
>
> Atenc.;
> Elazar
>
> Novos endereços, o Yahoo! que você conhece. Crie um email novo com a sua
> cara @ymail.com ou @rocketmail.com.
> http://br.new.mail.yahoo.com/addresses
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Thales Eduardo Barros de Oliveira
Desenvolvedor Delphi / Firebird / Java
Emails:
[EMAIL PROTECTED] (GoogleTalk)
[EMAIL PROTECTED] (MSN)
Blog:
http://tebosoftware.blogspot.com/

"Tente ser uma pessoa de valor, não de sucesso"
Albert Einstein


[As partes desta mensagem que não continham texto foram removidas]

Responder a