API do Pool de Threads

A API (interface de programação de aplicativo) do pool de threads usa um design baseado em objeto. Cada um dos seguintes objetos é representado por uma estrutura de dados do modo de usuário:

  • Um objeto de pool é um conjunto de threads de trabalho que podem ser usados para executar o trabalho. Cada processo pode criar vários pools isolados com características diferentes, conforme necessário. Também há um pool padrão para cada processo.
  • Um grupo limpo-up está associado a um conjunto de objetos geradores de retorno de chamada. Existem funções para aguardar e liberar todos os objetos que são membros de cada grupo limpo. Isso libera o aplicativo de manter o controle de todos os objetos que ele criou.
  • Um objeto de trabalho é atribuído a um pool e, opcionalmente, a um grupo limpo. Ele pode ser postado, fazendo com que um thread de trabalho do pool execute seu retorno de chamada. Um objeto de trabalho pode ter várias postagens pendentes; cada um gera um retorno de chamada. A operação pós-operação não pode falhar devido à falta de recursos.
  • Um objeto timer controla o agendamento de retornos de chamada. Sempre que um temporizador expira, seu retorno de chamada é postado em seu pool de trabalho. A configuração de um temporizador não pode falhar devido à falta de recursos.
  • Um objeto de espera faz com que um thread de garçom aguarde em um identificador de espera. Depois que a espera for atendida ou o período de tempo limite expirar, o thread do garçom postará o retorno de chamada dos objetos de espera no pool de trabalho da espera. A configuração de uma espera não pode falhar devido à falta de recursos.
  • Um objeto de E/S associa um identificador de arquivo à porta de conclusão de E/S para o pool de threads. Quando uma operação de E/S assíncrona é concluída, um thread de trabalho pega o status da operação e chama o retorno de chamada do objeto de E/S.

A tabela a seguir descreve os recursos das APIs do pool de threads original e atual.

Recurso Original API API atual
Sincronia Registerwaitforsingleobject
UnregisterWaitEx
CloseThreadpoolWait
CreateThreadpoolWait
SetThreadpoolWait
WaitForThreadpoolWaitCallbacks
Work Queueuserworkitem
CloseThreadpoolWork
CreateThreadpoolWork
SubmitThreadpoolWork
TrySubmitThreadpoolCallback
WaitForThreadpoolWorkCallbacks
Temporizador CreateTimerQueue
CreateTimerQueueTimer
ChangeTimerQueueTimer
DeleteTimerQueueTimer
DeleteTimerQueueEx
CloseThreadpoolTimer
CreateThreadpoolTimer
IsThreadpoolTimerSet
SetThreadpoolTimer
WaitForThreadpoolTimerCallbacks
E/S BindIoCompletionCallback
CancelThreadpoolIo
CloseThreadpoolIo
CreateThreadpoolIo
StartThreadpoolIo
WaitForThreadpoolIoCallbacks
Grupo de limpeza CloseThreadpoolCleanupGroup
CloseThreadpoolCleanupGroupMembers
CreateThreadpoolCleanupGroup
pool CloseThreadpool
CreateThreadpool
SetThreadpoolThreadMaximum
SetThreadpoolThreadMinimum
Ambiente de retorno de chamada DestroyThreadpoolEnvironment
InitializeThreadpoolEnvironment
SetThreadpoolCallbackCleanupGroup
SetThreadpoolCallbackLibrary
SetThreadpoolCallbackPool
SetThreadpoolCallbackPriority
SetThreadpoolCallbackRunsLong
Callback CallbackMayRunLong
Retorno de chamada limpo DisassociateCurrentThreadFromCallback
FreeLibraryWhenCallbackReturns
LeaveCriticalSectionWhenCallbackReturns
ReleaseMutexWhenCallbackReturns
ReleaseSemaphoreWhenCallbackReturns
SetEventWhenCallbackReturns

 

Pools de threads

Usando as funções do pool de threads