TThreadPoolのスレッドプーリング数をカスタマイズするには?

提供: Support
移動先: 案内検索

概要

TThreadPoolクラスは、並列プログラミングライブラリで使用するスレッドプーリング数を管理しています。


「並列プログラミングでのスレッドプーリングの概要」でも解説していますが、通常では 開発者がスレッドプーリング数を変更する必要はなく、ThreadPoolのデフォルトの設定で使用することを推奨しています。


ただ、開発者が実行環境のコア数を把握し、独自にスレッド数を制御したい時は、どうすれば良いのでしょうか?

このサポート情報では、TThreadPoolのスレッドプーリング数をカスタマイズする方法について解説いたします。

解説

TThreadPoolのスレッドプーリング数をカスタマイズするには、SetMaxWorkerThreadsメソッドでスレッド数を変更できます。


ただし、デフォルトのTThreadPoolのスレッドプーリング数を変更しないでください。


その理由としてデフォルトのTThreadPoolは、アプリケーション全体で共有されているグローバルインスタンスであり、別のアプリケーションから使用されている可能性があるため、これを変更するとアプリケーション全体に影響します。


そのため、TThreadPoolの独自のインスタンスを作成してください。


以下は、スレッドプーリング数= 10に設定する簡単なコード例です。

Delphiの場合:

var
  Pool: TThreadPool;
begin
  Pool:=nil;
..
..
  if Pool = nil then
  begin
    Pool := TThreadPool.Create;
    Pool.SetMaxWorkerThreads(10);
    ShowMessage('スレッド数='+IntToStr(Pool.MaxWorkerThreads));
  end;
end;

C++Builderの場合:

TThreadPool *Pool=NULL;
..
..
if (Pool == NULL) {
 Pool=new TThreadPool();
	 Pool->SetMaxWorkerThreads(10);
	 ShowMessage(L"スレッド数="+IntToStr(Pool->MaxWorkerThreads));
}


MaxWorkerThreadsの値は、TThread.ProcessorCountから設定されるMinimumWorkerThreads値よりも常に大きくなければならないことに注意してください。

関連情報