Classe CWorkerThread
Essa classe cria um thread de trabalho ou usa um existente, aguarda um ou mais identificadores de objeto kernel e executa uma função de cliente especificada quando um dos identificadores é sinalizado.
Importante
Essa classe e os respectivos membros não podem ser usados em aplicativos executados no Windows Runtime.
Sintaxe
template <class ThreadTraits = DefaultThreadTraits>
class CWorkerThread
Parâmetros
ThreadTraits
A classe que fornece a função de criação de thread, como CRTThreadTraits ou Win32ThreadTraits.
Membros
Estruturas protegidas
Nome | Descrição |
---|---|
WorkerClientEntry |
Construtores públicos
Nome | Descrição |
---|---|
CWorkerThread::CWorkerThread | O construtor do thread de trabalho. |
CWorkerThread::~CWorkerThread | O destruidor do thread de trabalho. |
Métodos públicos
Nome | Descrição |
---|---|
CWorkerThread::AddHandle | Chame esse método para adicionar o identificador de um objeto de espera à lista mantida pelo thread de trabalho. |
CWorkerThread::AddTimer | Chame esse método para adicionar o temporizador de um objeto de espera periódico à lista mantida pelo thread de trabalho. |
CWorkerThread::GetThreadHandle | Chame esse método para obter o identificador de thread do thread de trabalho. |
CWorkerThread::GetThreadId | Chame esse método para obter a ID de thread do thread de trabalho. |
CWorkerThread::Initialize | Chame esse método para inicializar o thread de trabalho. |
CWorkerThread::RemoveHandle | Chame esse método para remover um identificador da lista de objetos de espera. |
CWorkerThread::Shutdown | Chame esse método para desligar o thread de trabalho. |
Comentários
Para usar CWorkerThread
Crie uma instância dessa classe.
Chame CWorkerThread::Initialize.
Chame CWorkerThread::AddHandle com o identificador de um objeto kernel e um ponteiro para uma implementação de IWorkerThreadClient.
- ou -
Chame CWorkerThread::AddTimer com um ponteiro para uma implementação de IWorkerThreadClient.
Implemente IWorkerThreadClient::Execute para executar alguma ação quando o identificador ou temporizador for sinalizado.
Para remover um objeto da lista de objetos de espera, chame CWorkerThread::RemoveHandle.
Para encerrar o thread, chame CWorkerThread::Shutdown.
Requisitos
Cabeçalho: atlutil.h
CWorkerThread::AddHandle
Chame esse método para adicionar o identificador de um objeto de espera à lista mantida pelo thread de trabalho.
HRESULT AddHandle(
HANDLE hObject,
IWorkerThreadClient* pClient,
DWORD_PTR dwParam) throw();
Parâmetros
hObject
O identificador para um objeto de espera.
pClient
O ponteiro para a interface IWorkerThreadClient no objeto a ser chamado quando o identificador é sinalizado.
dwParam
O parâmetro a ser passado para IWorkerThreadClient::Execute quando o identificador é sinalizado.
Valor de retorno
Retornará S_OK se houver êxito ou um erro HRESULT, em caso de falha.
Comentários
IWorkerThreadClient::Execute será chamado por meio de pClient quando o identificador, hObject, for sinalizado.
CWorkerThread::AddTimer
Chame esse método para adicionar o temporizador de um objeto de espera periódico à 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.
pClient
O ponteiro para a interface IWorkerThreadClient no objeto a ser chamado quando o identificador é sinalizado.
dwParam
O parâmetro a ser passado para IWorkerThreadClient::Execute quando o identificador é sinalizado.
phTimer
[out] Endereço da variável HANDLE que, com êxito, recebe o identificador para o temporizador recém-criado.
Valor de retorno
Retornará S_OK se houver êxito ou um erro HRESULT, em caso de falha.
Comentários
IWorkerThreadClient::Execute será chamado por meio de pClient quando o temporizador for sinalizado.
Passe o identificador de temporizador do phTimer para CWorkerThread::RemoveHandle para fechar o temporizador.
CWorkerThread::CWorkerThread
O construtor .
CWorkerThread() throw();
CWorkerThread::~CWorkerThread
O destruidor.
~CWorkerThread() throw();
Comentários
Chame CWorkerThread::Shutdown.
CWorkerThread::GetThreadHandle
Chame esse método para obter o identificador de thread do thread de trabalho.
HANDLE GetThreadHandle() throw();
Valor de retorno
Retornará o identificador de thread ou NULL se o thread de trabalho não tiver sido inicializado.
CWorkerThread::GetThreadId
Chame esse método para obter a ID de thread do thread de trabalho.
DWORD GetThreadId() throw();
Valor de retorno
Retornará a ID de thread ou NULL se o thread de trabalho não tiver sido inicializado.
CWorkerThread::Initialize
Chame esse método para inicializar o thread de trabalho.
HRESULT Initialize() throw();
HRESULT Initialize(CWorkerThread<ThreadTraits>* pThread) throw();
Parâmetros
pThread
Um thread de trabalho existente.
Valor de retorno
Retornará S_OK se houver êxito ou um erro HRESULT, em caso de falha.
Comentários
Esse 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 objetos CWorkerThread
usem o mesmo thread de trabalho, inicialize um deles sem passar argumentos e passe um ponteiro para esse objeto para os métodos Initialize
de outros. Os objetos inicializados usando o ponteiro devem ser desligados antes do objeto usado para inicializá-los.
Confira CWorkerThread::Shutdown para obter informações sobre como o comportamento desse método muda quando inicializado usando um ponteiro para um objeto existente.
CWorkerThread::RemoveHandle
Chame esse método para remover um identificador da lista de objetos de espera.
HRESULT RemoveHandle(HANDLE hObject) throw();
Parâmetros
hObject
O identificador a ser removido.
Valor de retorno
Retornará S_OK se houver êxito ou um erro HRESULT, em caso de falha.
Comentários
Quando o identificador for removido, IWorkerThreadClient::CloseHandle será chamado no objeto associado que foi passado para AddHandle. Se essa chamada falhar, CWorkerThread
chamará a função CloseHandle do Windows no identificador.
CWorkerThread::Shutdown
Chame esse método para desligar o thread de trabalho.
HRESULT Shutdown(DWORD dwWait = ATL_WORKER_THREAD_WAIT) throw();
Parâmetros
dwWait
O tempo em milissegundos para aguardar o desligamento do thread de trabalho. ATL_WORKER_THREAD_WAIT é padronizado para 10 segundos. Se necessário, você pode definir seu próprio valor para esse símbolo antes de incluir atlutil.h.
Valor de retorno
Retorna S_OK em caso de êxito, ou um erro HRESULT em caso de falha, como se o valor do tempo limite, dwWait, tivesse sido excedido.
Comentários
Para reutilizar o objeto, chame CWorkerThread::Initialize depois de chamar esse método.
Observe que chamar Shutdown
em um objeto inicializado com um ponteiro para outro objeto CWorkerThread
não tem efeito e sempre retorna S_OK.
Confira também
DefaultThreadTraits
Classes
Multithreading: criando threads de trabalho
Interface IWorkerThreadClient