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

  1. Cree una instancia de esta clase.

  2. Llame a CWorkerThread::Initialize.

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

  4. Implemente IWorkerThreadClient::Execute para realizar alguna acción cuando se señaliza el identificador o el temporizador.

  5. Para quitar un objeto de la lista de objetos de espera, llame a CWorkerThread::RemoveHandle.

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