Clase CWorkerThread
Esta clase crea un subproceso de trabajo o usa uno existente, espera en uno o varios identificadores de objeto de kernel y ejecuta una función de cliente especificada cuando se señala uno de los identificadores.
Importante
Esta clase y sus miembros no se pueden usar en las aplicaciones que se ejecutan en Windows Runtime.
Sintaxis
template <class ThreadTraits = DefaultThreadTraits>
class CWorkerThread
Parámetros
ThreadTraits
La clase que proporciona la función de creación de subprocesos, como CRTThreadTraits o Win32ThreadTraits.
Miembros
Estructuras protegidas
Nombre | Descripción |
---|---|
WorkerClientEntry |
Constructores públicos
Nombre | Descripción |
---|---|
CWorkerThread::CWorkerThread | El constructor del subproceso de trabajo. |
CWorkerThread::~CWorkerThread | El destructor del subproceso de trabajo. |
Métodos públicos
Nombre | Descripción |
---|---|
CWorkerThread::AddHandle | Llame a este método para agregar el identificador de un objeto de espera a la lista mantenida por el subproceso de trabajo. |
CWorkerThread::AddTimer | Llame a este método para agregar el temporizador de espera periódico a la lista mantenida por el subproceso de trabajo. |
CWorkerThread::GetThreadHandle | Llame a este método para obtener el identificador de subproceso del subproceso de trabajo. |
CWorkerThread::GetThreadId | Llame a este método para obtener el Id. de subproceso del subproceso de trabajo. |
CWorkerThread::Initialize | Llame a este método para inicializar el subproceso de trabajo. |
CWorkerThread::RemoveHandle | Llame a este método para quitar un identificador de la lista de objetos de espera. |
CWorkerThread::Shutdown | Llame a este método para apagar el subproceso de trabajo. |
Comentarios
Para usar CWorkerThread
Cree una instancia de esta clase.
Llame a CWorkerThread::Initialize.
Llame a CWorkerThread::AddHandle con el identificador de un objeto de kernel y un puntero dirigido a una implementación de IWorkerThreadClient.
O bien
Llame a CWorkerThread::AddTimer con un puntero dirigido a una implementación de IWorkerThreadClient.
Implemente IWorkerThreadClient::Execute para realizar alguna acción cuando se señaliza el identificador o el temporizador.
Para quitar un objeto de la lista de objetos de espera, llame a CWorkerThread::RemoveHandle.
Para finalizar el subproceso, llame a CWorkerThread::Shutdown.
Requisitos
Header: atlutil.h
CWorkerThread::AddHandle
Llame a este método para agregar el identificador de un objeto de espera a la lista mantenida por el subproceso de trabajo.
HRESULT AddHandle(
HANDLE hObject,
IWorkerThreadClient* pClient,
DWORD_PTR dwParam) throw();
Parámetros
hObject
El identificador de un objeto de espera.
pClient
El puntero a la interfaz IWorkerThreadClient del objeto al que se va a llamar cuando se señalice el identificador.
dwParam
Parámetro que se va a pasar a IWorkerThreadClient::Execute cuando se señalice el identificador.
Valor devuelto
Devuelve S_OK si es correcto o un error HRESULT en caso de error.
Comentarios
Se llamará a IWorkerThreadClient::Execute a través de pClient cuando se señalice el identificador hObject.
CWorkerThread::AddTimer
Llame a este método para agregar el temporizador de espera periódico a la lista mantenida por el subproceso de trabajo.
HRESULT AddTimer(
DWORD dwInterval,
IWorkerThreadClient* pClient,
DWORD_PTR dwParam,
HANDLE* phTimer) throw();
Parámetros
dwInterval
Especifica el período del temporizador en milisegundos.
pClient
El puntero a la interfaz IWorkerThreadClient del objeto al que se va a llamar cuando se señalice el identificador.
dwParam
Parámetro que se va a pasar a IWorkerThreadClient::Execute cuando se señalice el identificador.
phTimer
[out] Dirección de la variable HANDLE que, si se ejecuta correctamente, recibe el identificador del temporizador recién creado.
Valor devuelto
Devuelve S_OK si es correcto o un error HRESULT en caso de error.
Comentarios
Se llamará a IWorkerThreadClient::Execute a través de pClient cuando se señalice el temporizador.
Pase el controlador de temporizador de phTimer a CWorkerThread::RemoveHandle para cerrar el temporizador.
CWorkerThread::CWorkerThread
Constructor .
CWorkerThread() throw();
CWorkerThread::~CWorkerThread
El destructor .
~CWorkerThread() throw();
Comentarios
Llama a CWorkerThread::Shutdown.
CWorkerThread::GetThreadHandle
Llame a este método para obtener el identificador de subproceso del subproceso de trabajo.
HANDLE GetThreadHandle() throw();
Valor devuelto
Si el grupo de subprocesos no se ha inicializado, devuelve el identificador de subproceso o un valor NULL.
CWorkerThread::GetThreadId
Llame a este método para obtener el Id. de subproceso del subproceso de trabajo.
DWORD GetThreadId() throw();
Valor devuelto
Si el grupo de subprocesos no se ha inicializado, devuelve el Id. de subproceso o un valor NULL.
CWorkerThread::Initialize
Llame a este método para inicializar el subproceso de trabajo.
HRESULT Initialize() throw();
HRESULT Initialize(CWorkerThread<ThreadTraits>* pThread) throw();
Parámetros
pThread
Un subproceso de trabajo existente.
Valor devuelto
Devuelve S_OK si es correcto o un error HRESULT en caso de error.
Comentarios
Se debe llamar a este método para inicializar el objeto después de la creación o después de una llamada a CWorkerThread::Shutdown.
Para que dos o más objetos CWorkerThread
usen el mismo subproceso de trabajo, inicialice uno de ellos sin pasar argumentos, y después pase un puntero dirigido a ese objeto a los métodos Initialize
de los demás. Los objetos inicializados con el puntero deben apagarse antes que el objeto usado para inicializarlos.
Consulte CWorkerThread::Shutdown para obtener información sobre cómo cambia el comportamiento de ese método cuando se inicializa mediante un puntero a un objeto existente.
CWorkerThread::RemoveHandle
Llame a este método para quitar un identificador de la lista de objetos de espera.
HRESULT RemoveHandle(HANDLE hObject) throw();
Parámetros
hObject
El identificador que se va a quitar.
Valor devuelto
Devuelve S_OK si es correcto o un error HRESULT en caso de error.
Comentarios
Cuando se quita el identificador, se llamará a IWorkerThreadClient::CloseHandle en el objeto asociado que se pasó a AddHandle. Si se produce un error en esta llamada, CWorkerThread
llamará a la función CloseHandle de Windows en el identificador.
CWorkerThread::Shutdown
Llame a este método para apagar el subproceso de trabajo.
HRESULT Shutdown(DWORD dwWait = ATL_WORKER_THREAD_WAIT) throw();
Parámetros
dwWait
El tiempo en milisegundos para esperar a que el subproceso de trabajo se apague. ATL_WORKER_THREAD_WAIT establece su valor predeterminado en 10 segundos. Si es necesario, puede definir el valor que quiera para este símbolo antes de incluir atlutil.h.
Valor devuelto
Devuelve S_OK si se ejecuta correctamente y un error HRESULT en caso de error (por ejemplo, si se supera el valor de tiempo de espera, dwWait).
Comentarios
Para reutilizar el objeto, llame a CWorkerThread::Initialize después de llamar a este método.
Tenga en cuenta que llamar a Shutdown
en un objeto inicializado con un puntero a otro objeto CWorkerThread
no tiene ningún efecto y siempre devuelve S_OK.
Consulte también
DefaultThreadTraits
Clases
Multithreading: Crear subprocesos de trabajo
IWorkerThreadClient (interfaz)