- メインページ
- モジュール
- ネームスペース
- データ構造
- ファイル

- データ構造
- データ構造索引
- クラス階層
- データフィールド

Public 型 | Public メソッド | Protected メソッド
クラス mist::thread_pool
スレッド

スレッドプールを利用してスレッドの再利用を可能にするクラス [詳細]

`#include <thread.h>`

## Public 型
typedef size_t | size_type
| 符号なしの整数を表す型．コンテナ内の要素数や，各要素を指定するときなどに利用し，内部的には size_t 型と同じ
typedef ptrdiff_t | difference_type
| 符号付きの整数を表す型．コンテナ内の要素数や，各要素を指定するときなどに利用し，内部的には ptrdiff_t 型と同じ

## Public メソッド
| thread_pool ()
| スレッドプール内のオブジェクトを作成するが，スレッドプール内のスレッドは0の状態で初期化する（initialize関数を呼び出す必要あり）
| thread_pool (size_type number_of_max_threads)
| スレッドプール内のスレッド数を指定し，すぐにスレッドプールを使える状態で初期化する
virtual | ~thread_pool ()
| スレッドプールで使用している全てのリソースを開放する
bool | initialize (size_type number_of_max_threads)
| スレッドプール内で使用するスレッドの数を指定してスレッドプールを初期化する
bool | uninitialize ()
| スレッドプールで使用しているリソースを全て開放する
template<class Functor , class Param >
bool | execute (Functor f, Param p)
| 関数とパラメータを指定してスレッドを実行する
template<class Functor , class Param1 , class Param2 >
bool | execute (Functor f, Param1 p1, Param2 p2)
| 関数とパラメータを指定してスレッドを実行する
template<class Functor , class Param1 , class Param2 , class Param3 >
bool | execute (Functor f, Param1 p1, Param2 p2, Param3 p3)
| 関数とパラメータを指定してスレッドを実行する
template<class Functor , class Param1 , class Param2 , class Param3 , class Param4 >
bool | execute (Functor f, Param1 p1, Param2 p2, Param3 p3, Param4 p4)
| 関数とパラメータを指定してスレッドを実行する
template<class Functor >
bool | execute (Functor f)
| 関数とパラメータを指定してスレッドを実行する
template<class Functor , class Param >
bool | executes (Functor f, Param *param, size_t num_threads)
| 関数とパラメータを複数指定してスレッドを実行する
template<class Functor , class Param1 , class Param2 >
bool | executes (Functor f, Param1 *param1, Param2 *param2, size_t num_threads)
| 関数とパラメータを複数指定してスレッドを実行する
template<class Functor , class Param1 , class Param2 , class Param3 >
bool | executes (Functor f, Param1 *param1, Param2 *param2, Param3 *param3, size_t num_threads)
| 関数とパラメータを複数指定してスレッドを実行する
template<class Functor , class Param1 , class Param2 , class Param3 , class Param4 >
bool | executes (Functor f, Param1 *param1, Param2 *param2, Param3 *param3, Param4 *param4, size_t num_threads)
| 関数とパラメータを複数指定してスレッドを実行する
virtual bool | wait (unsigned long dwMilliseconds=INFINITE)
| 全てのスレッドが終了するか，タイムアウトになるまで待機する

## Protected メソッド
bool | exec (__thread_controller__::__thread_pool_functor__ *func)
| 関数をスレッドプール内のスレッドに割り当てて実行する
void | resume_thread_from_queue (size_type num_threads)
| スレッドプールから必要な数だけスレッドを再開する

## 説明

スレッドプールを利用してスレッドの再利用を可能にするクラス

スレッドプールを利用して処理を実行した場合，処理用にスレッドプール内のスレッドを割り当てます． 処理が終了した場合は，スレッドはスレッドプールに回収され，別の処理へ割り当てられます． スレッドを再利用することにより，スレッドの生成破棄に必要なオーバーヘッドを削減します．

注意
  初回起動時はスレッド生成に伴うオーバーヘッドがあります

使用例
struct parameter{ ... 何らかのパラメータ ... }; // スレッド関数に渡すパラメータ（特に構造体である必要は無い）
void thread_function( const parameter &p ); // スレッド関数（内部で何らかの処理をする）
// これ以降でスレッドを作成する
parameter param[ 処理を行う数 ];
for( i = 0 ; i < 処理を行う数 ; i++ )
{
パラメータに何らかの値を設定する
}
// スレッドプール内のスレッド数を指定して初期化
mist::thread_pool pool( 2 );
// 関数をパラメータを変えて複数回処理する
pool.executes( thread_function, param, 処理を行う数 );
// スレッドプール内のスレッドが実行している処理が全て終了するまで待機
pool.wait( );

## 関数

bool mist::thread_pool::exec | ( | __thread_controller__::__thread_pool_functor__ * | func | ) |
| inline protected

関数をスレッドプール内のスレッドに割り当てて実行する

引数

  [in] | func | … 実行されるスレッド関数

template<class Functor , class Param >

bool mist::thread_pool::execute | ( | Functor | f,
|  | Param | p
| ) |  |
| inline

関数とパラメータを指定してスレッドを実行する

スレッドプールの初期化が終了していない場合は false を返す． スレッドが実行する関数の引数はコピーして渡される．

引数

  [in,out] | p | … スレッドの関数に渡すパラメータ
  [in] | f | … 実行されるスレッド関数

template<class Functor , class Param1 , class Param2 >

bool mist::thread_pool::execute | ( | Functor | f,
|  | Param1 | p1,
|  | Param2 | p2
| ) |  |
| inline

関数とパラメータを指定してスレッドを実行する

スレッドプールの初期化が終了していない場合は false を返す． スレッドが実行する関数の引数はコピーして渡される．

引数

  [in,out] | p1 | … スレッドの関数に渡すパラメータ
  [in,out] | p2 | … スレッドの関数に渡すパラメータ
  [in] | f | … 実行されるスレッド関数

template<class Functor , class Param1 , class Param2 , class Param3 >

bool mist::thread_pool::execute | ( | Functor | f,
|  | Param1 | p1,
|  | Param2 | p2,
|  | Param3 | p3
| ) |  |
| inline

関数とパラメータを指定してスレッドを実行する

スレッドプールの初期化が終了していない場合は false を返す． スレッドが実行する関数の引数はコピーして渡される．

引数

  [in,out] | p1 | … スレッドの関数に渡すパラメータ
  [in,out] | p2 | … スレッドの関数に渡すパラメータ
  [in,out] | p3 | … スレッドの関数に渡すパラメータ
  [in] | f | … 実行されるスレッド関数

template<class Functor , class Param1 , class Param2 , class Param3 , class Param4 >

bool mist::thread_pool::execute | ( | Functor | f,
|  | Param1 | p1,
|  | Param2 | p2,
|  | Param3 | p3,
|  | Param4 | p4
| ) |  |
| inline

関数とパラメータを指定してスレッドを実行する

スレッドプールの初期化が終了していない場合は false を返す． スレッドが実行する関数の引数はコピーして渡される．

引数

  [in,out] | p1 | … スレッドの関数に渡すパラメータ
  [in,out] | p2 | … スレッドの関数に渡すパラメータ
  [in,out] | p3 | … スレッドの関数に渡すパラメータ
  [in,out] | p4 | … スレッドの関数に渡すパラメータ
  [in] | f | … 実行されるスレッド関数

template<class Functor >

bool mist::thread_pool::execute | ( | Functor | f | ) |
| inline

関数とパラメータを指定してスレッドを実行する

スレッドプールの初期化が終了していない場合は false を返す．

引数

  [in] | f | … 実行されるスレッド関数

template<class Functor , class Param >

bool mist::thread_pool::executes | ( | Functor | f,
|  | Param * | param,
|  | size_t | num_threads
| ) |  |
| inline

関数とパラメータを複数指定してスレッドを実行する

スレッドプールの初期化が終了していない場合は false を返す． スレッドが実行する関数の引数はコピーして渡される．

引数

  [in,out] | param | … スレッドの関数に渡すパラメータ
  [in] | num_threads | … スレッド数
  [in] | f | … 実行されるスレッド関数

template<class Functor , class Param1 , class Param2 >

bool mist::thread_pool::executes | ( | Functor | f,
|  | Param1 * | param1,
|  | Param2 * | param2,
|  | size_t | num_threads
| ) |  |
| inline

関数とパラメータを複数指定してスレッドを実行する

スレッドプールの初期化が終了していない場合は false を返す． スレッドが実行する関数の引数はコピーして渡される．

引数

  [in,out] | param1 | … スレッドの関数に渡すパラメータ
  [in,out] | param2 | … スレッドの関数に渡すパラメータ
  [in] | num_threads | … スレッド数
  [in] | f | … 実行されるスレッド関数

template<class Functor , class Param1 , class Param2 , class Param3 >

bool mist::thread_pool::executes | ( | Functor | f,
|  | Param1 * | param1,
|  | Param2 * | param2,
|  | Param3 * | param3,
|  | size_t | num_threads
| ) |  |
| inline

関数とパラメータを複数指定してスレッドを実行する

スレッドプールの初期化が終了していない場合は false を返す． スレッドが実行する関数の引数はコピーして渡される．

引数

  [in,out] | param1 | … スレッドの関数に渡すパラメータ
  [in,out] | param2 | … スレッドの関数に渡すパラメータ
  [in,out] | param3 | … スレッドの関数に渡すパラメータ
  [in] | num_threads | … スレッド数
  [in] | f | … 実行されるスレッド関数

template<class Functor , class Param1 , class Param2 , class Param3 , class Param4 >

bool mist::thread_pool::executes | ( | Functor | f,
|  | Param1 * | param1,
|  | Param2 * | param2,
|  | Param3 * | param3,
|  | Param4 * | param4,
|  | size_t | num_threads
| ) |  |
| inline

関数とパラメータを複数指定してスレッドを実行する

スレッドプールの初期化が終了していない場合は false を返す． スレッドが実行する関数の引数はコピーして渡される．

引数

  [in,out] | param1 | … スレッドの関数に渡すパラメータ
  [in,out] | param2 | … スレッドの関数に渡すパラメータ
  [in,out] | param3 | … スレッドの関数に渡すパラメータ
  [in,out] | param4 | … スレッドの関数に渡すパラメータ
  [in] | num_threads | … スレッド数
  [in] | f | … 実行されるスレッド関数

bool mist::thread_pool::initialize | ( | size_type | number_of_max_threads | ) |
| inline

スレッドプール内で使用するスレッドの数を指定してスレッドプールを初期化する

既にスレッドプールを初期化している場合は，現在のスレッドが全て終了するまで待機する

引数

  [in] | number_of_max_threads | … スレッドプールにためておくスレッドの数

void mist::thread_pool::resume_thread_from_queue | ( | size_type | num_threads | ) |
| inline protected

スレッドプールから必要な数だけスレッドを再開する

引数

  [in] | num_threads | … リジュームするスレッド数

bool mist::thread_pool::uninitialize | ( |  | ) |
| inline

スレッドプールで使用しているリソースを全て開放する

現在のスレッドが全て終了するまで待機し，スレッドプールで使用しているリソースを全て開放する

virtual bool mist::thread_pool::wait | ( | unsigned long | dwMilliseconds = `INFINITE` | ) |
| inline virtual

全てのスレッドが終了するか，タイムアウトになるまで待機する

タイムアウトを INFINITE に設定することで，スレッドが終了するまで待ち続ける． スレッドプールの初期化が終了していない場合は false を返す．

引数

  [in] | dwMilliseconds | … タイムアウト時間（ミリ秒単位）

戻り値

  true | … スレッドがタイムアウト前に終了した
  false | … タイムアウトが発生したか，その他のエラーが発生

このクラスの説明は次のファイルから生成されました:

- thread.h