Arquetipo de trabajo
Las clases que se ajustan al arquetipo de trabajo proporcionan el código para procesar elementos de trabajo en cola en un grupo de subprocesos.
Implementación
Para implementar una clase conforme a este arquetipo, la clase debe proporcionar las siguientes características:
| Método | Descripción |
|---|---|
| Inicialización | Se llama para inicializar el objeto de trabajo antes de que las solicitudes se pasen a Execute. |
| Ejecutar | Se llama para procesar un elemento de trabajo. |
| Terminate | Se llama para desinicializar el objeto de trabajo después de que todas las solicitudes se hayan pasado a Execute. |
| Definición de tipos | Descripción |
|---|---|
| RequestType | Definición de tipo para el tipo de elemento de trabajo que la clase de trabajo puede procesar. |
Una clase de trabajo típica tiene este aspecto:
class CMyWorker
{
public:
typedef MyRequestType RequestType;
BOOL Initialize(void* pvWorkerParam);
void Execute(MyRequestType request, void* pvWorkerParam, OVERLAPPED* pOverlapped);
void Terminate(void* pvWorkerParam);
};
Implementaciones existentes
Estas clases se ajustan a este arquetipo:
| Clase | Descripción |
|---|---|
| CNonStatelessWorker | Recibe solicitudes del grupo de subprocesos y las pasa a un objeto de trabajo que se crea y destruye para cada solicitud. |
Uso
Estos parámetros de plantilla esperan que la clase se ajuste a este arquetipo:
| Nombre de parámetro | Usado por |
|---|---|
| Trabajo | CThreadPool |
| Trabajo | CNonStatelessWorker |
Requisitos
Encabezado: atlutil.h
WorkerArchetype::Execute
Se llama para procesar un elemento de trabajo.
void Execute(
RequestType request,
void* pvWorkerParam,
OVERLAPPED* pOverlapped);
Parámetros
Solicitud
Elemento de trabajo que se va a procesar. El elemento de trabajo es del mismo tipo que RequestType .
pvWorkerParam
Parámetro personalizado comprendido por la clase de trabajo. También se pasa a WorkerArchetype::Initialize y Terminate .
pOverlapped
Puntero a la estructura OVERLAPPED utilizada para crear la cola en la que se ponen en cola los elementos de trabajo.
WorkerArchetype::Initialize
Se llama para inicializar el objeto de trabajo antes de que las solicitudes se pasen a WorkerArchetype::Execute .
BOOL Initialize(void* pvParam) throw();
Parámetros
pvParam
Parámetro personalizado comprendido por la clase de trabajo. También se pasa a WorkerArchetype::Terminate y WorkerArchetype::Execute .
Valor devuelto
Devuelve TRUE si se ejecuta correctamente, FALSE en caso de error.
WorkerArchetype::RequestType
Definición de tipo para el tipo de elemento de trabajo que la clase de trabajo puede procesar.
typedef MyRequestType RequestType;
Comentarios
Este tipo debe usarse como primer parámetro de y debe ser capaz de convertirse a y WorkerArchetype::Execute desde un ULONG_PTR.
WorkerArchetype::Terminate
Se llama para desinicializar el objeto de trabajo después de que todas las solicitudes se hayan pasado a WorkerArchetype::Execute ).
void Terminate(void* pvParam) throw();
Parámetros
pvParam
Parámetro personalizado comprendido por la clase de trabajo. También se pasa a WorkerArchetype::Initialize y WorkerArchetype::Execute .