status da posição de umvetor
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:
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
Curtidas 0
Respostas
Kapak
19/03/2005
Acho que seria mais fácil vc atualizar esse vetor no evento onTerminate de cada thread.
GOSTEI 0
Nildo
19/03/2005
é só verificar:
if Assigned( Vetor[ Posicao ] ) then Vetor[ Posicao ] := TSuaThread.Create( blablabla );
GOSTEI 0
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.
Então pode ser que ela já tenha terminado e qdo for dado o Resume, dará erro.
GOSTEI 0
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
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
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
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.
E para desativá-la no vetor é bom utilizar uma Critical Section p/ fazer isso em modo safe.
GOSTEI 0
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.
Se for apenas isto, então basta
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
19/03/2005
Parece que o autor do tópico não ficou muito interessado pelas sugestões apresentadas.
GOSTEI 0
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