Oharra
Orrialde honetara sartzeak baimena behar du. Saioa hasteko edo direktorioak aldatzen saia zaitezke.
Orrialde honetara sartzeak baimena behar du. Direktorioak aldatzen saia zaitezke.
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)