次の方法で共有


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::InitializeWorker::Terminate に渡されるのと同じ pvWorkerParam、および IO 完了ポート キューで使用される OVERLAPPED 構造体へのポインタです。

Worker クラスでは、スレッド プールでキューに置かれるアイテムの型が Worker::RequestType の typedef で宣言されます。この型は ULONG_PTR に対して双方向にキャストできる必要があります。

Worker クラスの例として、CNonStatelessWorker クラス があります。

必要条件

ヘッダー : atlutil.h

参照

参照

IThreadPoolConfig インターフェイス

DefaultThreadTraits

その他の技術情報

CThreadPool のメンバ

ATL のクラス