Compartilhar via


Pool de Segmentos

Pool de segmentos é uma forma de multiencadeamento onde as tarefas são adicionadas a uma fila e iniciadas automaticamente quando os segmentos são criados.Com o pool de thread, você chama o método ThreadPool.QueueUserWorkItem com um representante para o procedimento que você deseja executar e Visual Basic cria a thread e executa o procedimento.

Exemplo de Pool de Segmentos

Este exemplo mostra como você pode usar o pool de segmentos para iniciar várias tarefas.

Sub DoWork()
    ' Queue a task
    System.Threading.ThreadPool.QueueUserWorkItem( _
        New System.Threading.WaitCallback(AddressOf SomeLongTask))
    ' Queue another task
    System.Threading.ThreadPool.QueueUserWorkItem( _
        New System.Threading.WaitCallback(AddressOf AnotherLongTask))
End Sub
Sub SomeLongTask(ByVal state As Object)
    ' Insert code to perform a long task.
End Sub
Sub AnotherLongTask(ByVal state As Object)
    ' Insert code to perform another long task.
End Sub

O pool de segmentos é útil quando você deseja iniciar muitas tarefas separadas sem definir individualmente as propriedades de cada segmento.Cada segmento começa com um tamanho de pilha e prioridade padrões.Por padrão, mais de 25 segmentos de pool de segmentos podem executar por processador do sistema.Segmentos adicionais em excesso do limite podem ser enfileirados, mas eles não iniciam até que outros segmentos terminem.

Uma vantagem do pool de segmentos é que você pode passar argumentos em um objeto de estado para o procedimento de tarefas.Se o procedimento que você está chamando exigir mais de um argumento, você pode usar uma estrutura ou uma instância de uma classe com um tipo de dados Object.

Parâmetros do Pool de Segmentos e Valores de Retorno

Valores de retorno de um segmento de pool de segmentos não são simples.A forma padrão de retornar valores de uma chamada de função não é permitida porque procedimentos Sub são os únicos tipos de procedimentos que podem ser colocados na fila para um pool de segmentos.Uma maneira de você poder fornecer parâmetros e retornar valores é envolvendo os parâmetros, valores de retorno e métodos em uma classe wrapper como descrito em Parâmetros e Valores de Retorno para os Procedimentos Multisegmentados.

Uma maneira mais fácil de fornecer parâmetros e retornar valores é usar o estado ByVal opcional de variável de objeto do método QueueUserWorkItem.Se você usar essa variável para passar uma referência a uma instância de uma classe, os membros da instância podem ser modificados pelo segmento de pool de segmentos e usados como valores de retorno.

Inicialmente pode não ser óbvio que você possa modificar um objeto referenciado por uma variável que é passada por valor.Você pode fazer isso porque somente a referência de objeto é passada por valor.Quando você faz alterações em membros do objeto referenciados pela referência de objeto, as alterações são aplicadas à instância real da classe.

Estruturas não podem ser usadas para retornar valores dentro de objetos de estado.Como estruturas são tipos de valor, as alterações que o processo assíncrono faz não alteram os membros da estrutura original.Use estruturas para fornecer parâmetros quando valores retornados não forem necessários.

Consulte também

Conceitos

Multithreading Avançado com Visual Basic

Aplicativos Multithreaded

Sincronização de Segmento

Multithreading com Formulários e Controles

Referência

QueueUserWorkItem

System.Threading

Instrução SyncLock