CThreadPool クラス
更新 : 2007 年 11 月
このクラスには、ワーク アイテムのキューを処理するワーカー スレッドのプールが用意されています。
template <
class Worker,
class ThreadTraits = DefaultThreadTraits
>
class CThreadPool :
public IThreadPoolConfig
パラメータ
Worker
worker archetype に準拠するクラス。このクラスには、スレッド プールのキューに置かれたワーク アイテムを処理するコードが用意されています。ThreadTraits
プール内にスレッドを作成するための関数が用意されたクラス。
解説
プール内のスレッドは、プールの初期化、サイズ変更、シャットダウン時に作成または破棄されます。Worker クラスのインスタンスは、プール内の各ワーカー スレッドのスタックに作成されます。各インスタンスが有効であるのは、スレッドの有効期間中です。
スレッドが作成された直後に、そのスレッドに関連付けられたオブジェクトで Worker::Initialize が呼び出されます。スレッドが破棄される直前に、Worker::Terminate が呼び出されます。これらのメソッドは、引数として void* を受け入れる必要があります。この引数の値は、CThreadPool::Initialize メソッドの pvWorkerParam パラメータを通じてスレッド プールに渡されます。
キューにワーク アイテムがあり、また、ワークで利用できるワーカー スレッドがある場合、ワーカー スレッドはキューからアイテムを取り出し、そのスレッドに関連した Worker オブジェクトの Execute メソッドを呼び出します。次に、3 つのアイテムがメソッドに渡されます。3 つのアイテムとは、キューからのアイテム、Worker::Initialize や Worker::Terminate に渡されるのと同じ pvWorkerParam、および IO 完了ポート キューで使用される OVERLAPPED 構造体へのポインタです。
Worker クラスでは、スレッド プールでキューに置かれるアイテムの型が Worker::RequestType の typedef で宣言されます。この型は ULONG_PTR に対して双方向にキャストできる必要があります。
Worker クラスの例として、CNonStatelessWorker クラス があります。
必要条件
ヘッダー : atlutil.h