GARANTIR DESCONTO

Fórum status da posição de umvetor #273228

19/03/2005

0

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

Responder

Posts

21/03/2005

Kapak

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


Responder

Gostei + 0

21/03/2005

Nildo

é só verificar:

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



Responder

Gostei + 0

21/03/2005

Kapak

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.


Responder

Gostei + 0

21/03/2005

Nildo

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


Responder

Gostei + 0

21/03/2005

Massuda

...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.


Responder

Gostei + 0

21/03/2005

Nildo

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!


Responder

Gostei + 0

21/03/2005

Kapak

É 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.


Responder

Gostei + 0

24/03/2005

Beppe

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;



Responder

Gostei + 0

24/03/2005

Kapak

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


Responder

Gostei + 0

24/03/2005

Beppe

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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar