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 .

Vea también

Conceptos
Componentes de escritorio COM de ATL