Partilhar via


Classe CWorkerThread

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

  1. Crie uma instância desta classe.

  2. Chama o CWorkerThread::Inicialize.

  3. 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.

  4. Implemente o IWorkerThreadClient::Execute para tomar alguma ação quando o handler ou temporizador for sinalizado.

  5. Para remover um objeto da lista de objetos aguardáveis, chame CWorkerThread::RemoveHandle.

  6. 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