Partilhar via


Pausando e retornar os threads

As maneiras mais comuns para sincronizar as atividades de segmentos são segmentos de bloco e versão ou a objetos de bloquear ou regiões do código.Para mais informações sobre esses mecanismos de bloqueio e travamento, consulte Visão geral dos primitivos de sincronização.

Você também pode ter segmentos colocados-se no estado de suspensão.Segmentos são bloqueados quando ou em espera, você pode usar um ThreadInterruptedException Interrompa-os de seus estados de espera.

O método thread.suspensão

Chamando o Thread.Sleep método faz com que o thread corrente bloquear imediatamente para o número de milissegundos que você passar para Thread.Sleep, produzindo o restante da sua fração de time para outro thread. Um thread não é possível chamar Thread.Sleep em outro thread.

De chamadaThread.Sleep com Timeout.Infinite causará um segmento no modo de suspensão até que ela seja interrompida por outro thread que chama Thread.Interrupt, ou até que seja finalizada pelo Thread.Abort.

Interromper threads

Você pode interromper um segmento em espera, chamando Thread.Interrupt no thread bloqueado para lançar um ThreadInterruptedException, que interrompe o segmento de telefonar de bloqueio. O thread deve capturar o ThreadInterruptedException e fazer tudo o que é apropriado para continuar a trabalhar. Se o thread de ignorar a exceção, o tempo de execução captura a exceção e pára o thread.

Observação:

Se o thread-alvo não estiver bloqueado quando Thread.Interrupt é chamado, o thread não seja interrompida até que ele blocos. Se o thread nunca bloquear, ele pôde ser concluída sem nunca sejam interrompidos.

Se for uma espera uma espera gerenciada e, em seguida, Thread.Interrupt e Thread.Abort o thread ambos ativado imediatamente. Se uma espera uma espera não gerenciada (por exemplo, uma invocação de plataforma chamadas para o Win32 WaitForSingleObject funcionar), nem Thread.Interrupt nem Thread.Abort pode assumir o controle do thread até que ele retorne ao ou chamadas para código gerenciado. No código gerenciado, o comportamento é o seguinte:

Suspender e continuar (obsoleto)

Observação importante:

No .NET estrutura versão 2,0, o Thread.Suspend e Thread.Resume métodos são marcados obsoleto e serão removidos em uma versão futura.

Você também pode pausar um thread chamando Thread.Suspend. Quando um thread chama Thread.Suspend em si, os blocos de telefonar até que o thread é retomada por outro thread. Quando um thread chama Thread.Suspend em Outros thread, a telefonar é uma telefonar sem bloqueio, que faz com que o Outros thread fazer uma pausar. De chamadaThread.Resume Interrompe a outro thread de estado de suspensão e faz com que o thread continuar a execução, independentemente de como muitas vezes Thread.Suspend foi chamado. Por exemplo, se você chamar Thread.Suspend cinco vezes consecutivas e, em seguida, telefonar Thread.Resume, o thread continua a execução imediatamente após a telefonar para Thread.Resume.

Ao contrário de Thread.Sleep, Thread.Suspend não faz com que um thread interromper a execução imediatamente. O common linguagem tempo de execução deve aguardar até que o thread atingiu um ponto de seguro antes que ele pode suspender o thread.Um segmento não pode ser suspenso se não tiver sido iniciado ou se ele foi interrompido.Para obter detalhes sobre pontos de seguros, consulte Thread.Suspend, coleta de lixo e pontos de segurança.

Observação importante:

O Thread.Suspend e Thread.Resume métodos não são geralmente útil para aplicativos e não devem ser confundidos com mecanismos de sincronização. Porque Thread.Suspend e Thread.Resume não se baseie em cooperação do thread que está sendo controlado, eles são altamente intrusivos e pode resultar em problemas sérios de aplicativos como deadlocks (por exemplo, se você suspender um segmento que contém um recurso necessário outro thread).

Alguns aplicativos são necessário controlar a prioridade de segmentos para melhorar o desempenho.Para fazer isso, você deve usar o Priority propriedade em vez de Thread.Suspend.

Consulte também

Conceitos

Visão geral dos primitivos de sincronização

Thread.Suspend, coleta de lixo e pontos de segurança

Referência

Thread

ThreadInterruptedException

ThreadAbortException

Outros recursos

Threads gerenciadas

Usando threads e Threading