Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.
Essa classe cria uma thread de trabalho ou utiliza uma já existente, aguarda por um ou mais identificadores de objeto do kernel e executa uma função de cliente especificada quando um dos identificadores é ativado.
Importante
Esta classe e os seus membros não podem ser usados em aplicações que sejam executadas no Windows Runtime.
Sintaxe
template <class ThreadTraits = DefaultThreadTraits>
class CWorkerThread
Parâmetros
ThreadTraits
A classe que fornece a função de criação de threads, como CRTThreadTraits ou Win32ThreadTraits.
Membros
Estruturas Protegidas
| Nome | Description |
|---|---|
WorkerClientEntry |
Construtores Públicos
| Nome | Description |
|---|---|
| CWorkerThread::CWorkerThread | O construtor para a thread de trabalho. |
| CWorkerThread::~CWorkerThread | O destruidor para o fio de trabalho. |
Métodos Públicos
| Nome | Description |
|---|---|
| CWorkerThread::AddHandle | Chame este método para adicionar o handle de um objeto esperável à lista mantida pelo thread de trabalho. |
| CWorkerThread::AddTimer | Chame este método para adicionar um temporizador periódico de espera à lista mantida pelo thread de trabalho. |
| CWorkerThread::GetThreadHandle | Chame este método para obter a alavanca do fio do fio trabalhador. |
| CWorkerThread::GetThreadId | Chame este método para obter o ID do thread do worker thread. |
| CWorkerThread::Inicializar | Chame este método para inicializar a thread de trabalho. |
| CWorkerThread::RemoveHandle | Chame este método para remover um handle da lista de objetos aguardáveis. |
| CWorkerThread::Encerramento | Chame este método para encerrar o thread de trabalhadores. |
Observações
Para usar CWorkerThread
Crie uma instância desta classe.
Chama o CWorkerThread::Inicialize.
Chame CWorkerThread::AddHandle com o handle de um objeto kernel e um ponteiro para uma implementação do IWorkerThreadClient.
- ou -
Chame CWorkerThread::AddTimer com um ponteiro para uma implementação do IWorkerThreadClient.
Implemente o IWorkerThreadClient::Execute para tomar alguma ação quando o handler ou temporizador for sinalizado.
Para remover um objeto da lista de objetos aguardáveis, chame CWorkerThread::RemoveHandle.
Para terminar o tópico, ligue para CWorkerThread::Shutdown.
Requerimentos
Cabeçalho: atlutil.h
CWorkerThread::AddHandle
Chame este método para adicionar o handle de um objeto esperável à lista mantida pelo thread de trabalho.
HRESULT AddHandle(
HANDLE hObject,
IWorkerThreadClient* pClient,
DWORD_PTR dwParam) throw();
Parâmetros
hObjeto
A pega de um objeto à espera.
pCliente
O ponteiro para a interface IWorkerThreadClient no objeto a ser chamado quando o handle é sinalizado.
dwParam
O parâmetro a ser passado para o IWorkerThreadClient::Execute quando o handle for sinalizado.
Valor de retorno
Devolve S_OK em caso de sucesso, ou um erro HRESULT em caso de falha.
Observações
IWorkerThreadClient::Execute será chamado através do pClient quando o handle, hObject, for sinalizado.
CWorkerThread::AddTimer
Chame este método para adicionar um temporizador periódico de espera à lista mantida pelo thread de trabalho.
HRESULT AddTimer(
DWORD dwInterval,
IWorkerThreadClient* pClient,
DWORD_PTR dwParam,
HANDLE* phTimer) throw();
Parâmetros
dwInterval
Especifica o período do temporizador em milissegundos.
pCliente
O ponteiro para a interface IWorkerThreadClient no objeto a ser chamado quando o handle é sinalizado.
dwParam
O parâmetro a ser passado para o IWorkerThreadClient::Execute quando o handle for sinalizado.
PhTimer
[fora] Endereço da variável HANDLE que, em caso de sucesso, recebe o handle para o temporizador recém-criado.
Valor de retorno
Devolve S_OK em caso de sucesso, ou um erro HRESULT em caso de falha.
Observações
IWorkerThreadClient::Execute será chamado através do pClient quando o temporizador for sinalizado.
Passa a alavanca do temporizador do phTimer para o CWorkerThread::RemoveHandle para fechar o temporizador.
CWorkerThread::CWorkerThread
O construtor.
CWorkerThread() throw();
CWorkerThread::~CWorkerThread
O destruidor.
~CWorkerThread() throw();
Observações
Chama o CWorkerThread::Shutdown.
CWorkerThread::GetThreadHandle
Chame este método para obter a alavanca do fio do fio trabalhador.
HANDLE GetThreadHandle() throw();
Valor de retorno
Devolve o alvo do thread ou NULL se o thread worker não tiver sido inicializado.
CWorkerThread::GetThreadId
Chame este método para obter o ID do thread do worker thread.
DWORD GetThreadId() throw();
Valor de retorno
Devolve o ID do thread ou NULL se o thread worker não tiver sido inicializado.
CWorkerThread::Inicializar
Chame este método para inicializar a thread de trabalho.
HRESULT Initialize() throw();
HRESULT Initialize(CWorkerThread<ThreadTraits>* pThread) throw();
Parâmetros
pThread
Um tópico de trabalho já existente.
Valor de retorno
Devolve S_OK em caso de sucesso, ou um erro HRESULT em caso de falha.
Observações
Este método deve ser chamado para inicializar o objeto após a criação ou após uma chamada para CWorkerThread::Shutdown.
Para que dois ou mais CWorkerThread objetos usem o mesmo thread de trabalho, inicialize um deles sem passar quaisquer argumentos e depois passe um ponteiro para esse objeto para os Initialize métodos dos outros. Os objetos inicializados usando o ponteiro devem ser desligados antes do objeto usado para os inicializar.
Consulte CWorkerThread::Shutdown para informações sobre como o comportamento desse método muda quando inicializado usando um ponteiro para um objeto existente.
CWorkerThread::RemoveHandle
Chame este método para remover um handle da lista de objetos aguardáveis.
HRESULT RemoveHandle(HANDLE hObject) throw();
Parâmetros
hObjeto
A pega para remover.
Valor de retorno
Devolve S_OK em caso de sucesso, ou um erro HRESULT em caso de falha.
Observações
Quando o handle for removido , o IWorkerThreadClient::CloseHandle será chamado no objeto associado que foi passado para o AddHandle. Se esta chamada falhar, CWorkerThread irá chamar a função Windows CloseHandle no handle.
CWorkerThread::Encerramento
Chame este método para encerrar o thread de trabalhadores.
HRESULT Shutdown(DWORD dwWait = ATL_WORKER_THREAD_WAIT) throw();
Parâmetros
dwEspera
O tempo em milissegundos para esperar que o fio de trabalho desligue. ATL_WORKER_THREAD_WAIT por defeito é 10 segundos. Se necessário, pode definir o seu próprio valor para este símbolo antes de incluir o atlutil.h.
Valor de retorno
Devolve S_OK em caso de sucesso, ou um erro HRESULT em caso de falha, como se o valor de timeout, dwWait, for ultrapassado.
Observações
Para reutilizar o objeto, chame CWorkerThread::Initialize após chamar este método.
Note que chamar Shutdown um objeto inicializado com um ponteiro para outro CWorkerThread objeto não tem efeito e devolve sempre S_OK.
Consulte também
DefaultThreadTraits
Classes
Multithreading: Criação de threads de trabalho
IWorkerThreadClient Interface