worker の原型に準拠するクラスは、スレッド プールでキューに置かれた作業項目を処理するコードを提供します。
実装
この原型に準拠するクラスを実装するには、クラスにより次の機能が提供される必要があります。
| Method | 説明 |
|---|---|
| Initialize | 要求が Execute に渡される前に worker オブジェクトを初期化するために呼び出されます。 |
| 実行 | 作業項目を処理するために呼び出されます。 |
| Terminate | すべての要求が Execute に渡された後で worker オブジェクトを初期化前の状態に戻すために呼び出されます。 |
| Typedef | 説明 |
|---|---|
| RequestType | Worker クラスで処理できる作業項目の種類の typedef。 |
一般的な worker クラスは次のようになります。
class CMyWorker
{
public:
typedef MyRequestType RequestType;
BOOL Initialize(void* pvWorkerParam);
void Execute(MyRequestType request, void* pvWorkerParam, OVERLAPPED* pOverlapped);
void Terminate(void* pvWorkerParam);
};
既存の実装
これらのクラスは、次の原型に準拠しています。
| クラス | 説明 |
|---|---|
| CNonStatelessWorker | スレッド プールから要求を受信し、それらを各要求で作成および破棄された worker オブジェクトに渡します。 |
使用する方法
これらのテンプレート パラメーターは、クラスがこの原型に準拠していることを想定しています。
| パラメーター名 | 使用者 |
|---|---|
| ワーカー | CThreadPool |
| ワーカー | CNonStatelessWorker |
要件
ヘッダー: atlutil.h
WorkerArchetype::Execute
作業項目を処理するために呼び出されます。
void Execute(
RequestType request,
void* pvWorkerParam,
OVERLAPPED* pOverlapped);
パラメーター
request
処理される作業項目。 作業項目の種類は RequestType と同じです。
pvWorkerParam
worker クラスによって認識されるカスタム パラメーター。 WorkerArchetype::Initialize と Terminate にも渡されます。
pOverlapped
作業項目がキューに格納されたキューを作成するために使用される、オーバーラップ された構造体へのポインター。
WorkerArchetype::Initialize
要求が WorkerArchetype::Execute に渡される前に worker オブジェクトを初期化するために呼び出されます。
BOOL Initialize(void* pvParam) throw();
パラメーター
pvParam
worker クラスによって認識されるカスタム パラメーター。 WorkerArchetype::Terminate と WorkerArchetype::Execute にも渡されます。
戻り値
正常に終了した場合は TRUE、失敗した場合は FALSE が返されます。
WorkerArchetype::RequestType
Worker クラスで処理できる作業項目の種類の typedef。
typedef MyRequestType RequestType;
解説
この型は、WorkerArchetype::Execute の最初のパラメーターとして使用する必要があり、ULONG_PTR との間でキャストできる必要があります。
WorkerArchetype::Terminate
すべての要求が WorkerArchetype::Execute に渡された後で worker オブジェクトを初期化前の状態に戻すために呼び出されます。
void Terminate(void* pvParam) throw();
パラメーター
pvParam
worker クラスによって認識されるカスタム パラメーター。 WorkerArchetype::Initialize と WorkerArchetype::Execute にも渡されます。