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]