status da posição de umvetor

Delphi

19/03/2005

Oi pessoal,
Como posso verificar se em uma determinada posição de um vetor há memória alocada? Preciso dar um resume nas posições de um vetor de Threads que estiverem com threads alocadas. Tá dando erro de exception, acho que porque tá passando por posições no vetor em que não há threads.

Obrigado! :roll:


Domingosafn

Domingosafn

Curtidas 0

Respostas

Kapak

Kapak

19/03/2005

Acho que seria mais fácil vc atualizar esse vetor no evento onTerminate de cada thread.


GOSTEI 0
Nildo

Nildo

19/03/2005

é só verificar:

if Assigned( Vetor[ Posicao ] ) then
   Vetor[ Posicao ] := TSuaThread.Create( blablabla );



GOSTEI 0
Kapak

Kapak

19/03/2005

Olá Nildo, acho que ele quer dar Resume na thread que está suspensa.
Então pode ser que ela já tenha terminado e qdo for dado o Resume, dará erro.


GOSTEI 0
Nildo

Nildo

19/03/2005

Olá Nildo, acho que ele quer dar Resume na thread que está suspensa. Então pode ser que ela já tenha terminado e qdo for dado o Resume, dará erro.


Nesse caso, ele deve setar a propriedade FreeOnTerminate da mesma para True, e antes de dar o resume, verificar se ela está ´Assigned´ e ´<> nil´.

Dai funciona


GOSTEI 0
Massuda

Massuda

19/03/2005

...antes de dar o resume, verificar se ela está ´Assigned´ e ´<> nil´.
Acho que no vetor vai estar Assigned independente da thread ter ou não terminado...

O que precisa fazer é o que o kapak disse no início do tópico... no evento OnTerminate (ou no destrutor da thread), a própria thread deveria se remover (nil´zar) do vetor.


GOSTEI 0
Nildo

Nildo

19/03/2005

O que precisa fazer é o que o kapak disse no início do tópico... no evento OnTerminate (ou no destrutor da thread), a própria thread deveria se remover (nil´zar) do vetor.


tem razão!


GOSTEI 0
Kapak

Kapak

19/03/2005

É sim, no TList ou vetor das threads, ela vai estar Assigned.
E para desativá-la no vetor é bom utilizar uma Critical Section p/ fazer isso em modo safe.


GOSTEI 0
Beppe

Beppe

19/03/2005

Se é permitido o reuso de uma posição do vetor, tem a questão de saber onde está a thread dentro do vetor. Ou se faz uma busca linear pela instância, ou um campo na thread informa sua posição. E dependendo da natureza das threads realmente uma seção crítica pode ser necessária.
Como posso verificar se em uma determinada posição de um vetor há memória alocada? Preciso dar um resume nas posições de um vetor de Threads que estiverem com threads alocadas.

Se for apenas isto, então basta
if Assigned(Vetor[Posicao]) then
  Vetor[Posicao].Resume;



GOSTEI 0
Kapak

Kapak

19/03/2005

Parece que o autor do tópico não ficou muito interessado pelas sugestões apresentadas.


GOSTEI 0
Beppe

Beppe

19/03/2005

Parece que o autor do tópico não ficou muito interessado pelas sugestões apresentadas.

De repente ele tá de discada e não pode acessar durante a semana. Ou teve um contratempo, que nem eu tive da sexta até hoje. Ou é um mal-agradecido mesmo.


GOSTEI 0
POSTAR