Scheduler クラス
コンカレンシー ランタイム スケジューラの抽象化を表します。
構文
class Scheduler;
メンバー
保護されたコンストラクター
名前 | 説明 |
---|---|
Scheduler | Scheduler クラスのオブジェクトは、ファクトリ メソッドでのみ作成できます。または、暗黙的に作成されます。 |
~Scheduler デストラクター | Scheduler クラスのオブジェクトは、そのオブジェクトへのすべての外部参照が存在しなくなると、暗黙的に破棄されます。 |
パブリック メソッド
名前 | 説明 |
---|---|
[アタッチ] | スケジューラを呼び出し元のコンテキストにアタッチします。 このメソッドから制御が戻った後、呼び出し元のコンテキストはスケジューラによって管理され、そのスケジューラが現在のスケジューラになります。 |
作成 | _Policy パラメーターによって動作が記述された新しいスケジューラを作成し、スケジューラに初期参照を配置し、スケジューラへのポインターを返します。 |
CreateScheduleGroup | 過負荷です。 スケジューラ内に新しいスケジュール グループを作成します。 _Placement パラメーターを受け取るバージョンによって、新しく作成されたスケジュール グループ内のタスクは、そのパラメーターで指定された場所で実行されるようにバイアスがかかります。 |
GetNumberOfVirtualProcessors | スケジューラの現在の仮想プロセッサ数を返します。 |
GetPolicy | スケジューラの作成時に使用されたポリシーのコピーを返します。 |
Id | スケジューラの一意識別子を返します。 |
IsAvailableLocation | 指定された場所がスケジューラ上で使用できるかどうかを判断します。 |
リファレンス | スケジューラの参照カウントをインクリメントします。 |
RegisterShutdownEvent | スケジューラがシャットダウンし、自身を破棄したときに、_Event パラメーターで渡された Windows イベント ハンドルに通知します。 イベントに通知された時点で、スケジューラにスケジュールされていたすべての作業が完了します。 このメソッドでは、複数のシャットダウン イベントを登録できます。 |
リリース | スケジューラの参照カウントをデクリメントします。 |
ResetDefaultSchedulerPolicy | 既定のスケジューラ ポリシーをランタイムの既定のポリシーにリセットします。 次回、既定のスケジューラが作成されたときに、ランタイムの既定のポリシー設定が使用されます。 |
ScheduleTask | 過負荷です。 スケジューラ内の軽量タスクをスケジュールします。 軽量タスクは、ランタイムによって決定されるスケジュール グループ内に配置されます。 パラメーター _Placement を取るバージョンでは、指定された場所でタスクが実行されるようにバイアスがかかります。 |
SetDefaultSchedulerPolicy | ユーザー定義のポリシーを使用して既定のスケジューラを作成できるようにします。 このメソッドは、プロセス内に既定のスケジューラが存在しない場合にのみ呼び出すことができます。 既定のポリシーが設定されたら、SetDefaultSchedulerPolicy メソッドまたは ResetDefaultSchedulerPolicy メソッドの次の有効な呼び出しまで有効です。 |
解説
同時実行ランタイム スケジューラは、オペレーティング システムの実行コンテキスト (スレッドなど) にマップされた実行コンテキストを使用して、アプリケーションによってキューに登録された処理を実行します。 スケジューラのコンカレンシー レベルは、Resource Manager によって付与された仮想プロセッサの数と常に等しくなります。 仮想プロセッサとは、処理リソースを抽象化したものであり、基になるシステムのハードウェア スレッドに対応しています。 指定された時点に 1 つの仮想プロセッサで実行できるスケジューラ コンテキストは 1 つのみです。
同時実行ランタイムによって、並列処理を実行するプロセスごとに既定のスケジューラが作成されます。 さらに、独自のスケジューラ インスタンスを作成し、このクラスを使用して操作することもできます。
継承階層
Scheduler
要件
ヘッダー: concrt.h
名前空間: concurrency
[アタッチ]
スケジューラを呼び出し元のコンテキストにアタッチします。 このメソッドから制御が戻った後、呼び出し元のコンテキストはスケジューラによって管理され、そのスケジューラが現在のスケジューラになります。
virtual void Attach() = 0;
解説
スケジューラをアタッチすると、スケジューラに参照が暗黙的に配置されます。
将来のある時点で、スケジューラがシャットダウンできるようにするために、CurrentScheduler::Detach メソッドを呼び出す必要があります。
このメソッドが、別のスケジューラに既にアタッチされているコンテキストから呼び出された場合、既存のスケジューラは以前のスケジューラとして記憶され、新しく作成されたスケジューラが現在のスケジューラになります。 その後、CurrentScheduler::Detach
メソッドを呼び出すと、以前のスケジューラが現在のスケジューラとして復元されます。
このスケジューラが呼び出し元のコンテキストの現在のスケジューラである場合、このメソッドは improper_scheduler_attach 例外をスローします。
作成
_Policy
パラメーターによって動作が記述された新しいスケジューラを作成し、スケジューラに初期参照を配置し、スケジューラへのポインターを返します。
static Scheduler* __cdecl Create(const SchedulerPolicy& _Policy);
パラメーター
_Policy
新しく作成されたスケジューラの動作を記述するスケジューラ ポリシー。
戻り値
新しく作成されたスケジューラへのポインター。 この Scheduler
オブジェクトには、初期参照カウントが配置されています。
解説
Create
メソッドによってスケジューラが作成されたら、初期参照カウントを削除し、スケジューラがシャットダウンできるようにするために、将来のある時点で Release
メソッドを呼び出す必要があります。
このメソッドによって作成されたスケジューラは、呼び出し元のコンテキストにアタッチされていません。 コンテキストにアタッチするには、Attach メソッドを使用します。
このメソッドは、scheduler_resource_allocation_error や invalid_scheduler_policy_value など、さまざまな例外をスローする可能性があります。
CreateScheduleGroup
スケジューラ内に新しいスケジュール グループを作成します。 _Placement
パラメーターを受け取るバージョンによって、新しく作成されたスケジュール グループ内のタスクは、そのパラメーターで指定された場所で実行されるようにバイアスがかかります。
virtual ScheduleGroup* CreateScheduleGroup() = 0;
virtual ScheduleGroup* CreateScheduleGroup(location& _Placement) = 0;
パラメーター
_Placement
スケジュール グループ内のタスクが実行されるようにバイアスがかかる場所への参照。
戻り値
新しく作成されたスケジュール グループへのポインター。 この ScheduleGroup
オブジェクトには、初期参照カウントが配置されています。
解説
Release メソッドは、スケジュール グループに対するスケジュール作業の完了時に、スケジュール グループ上で呼び出す必要があります。 スケジュール グループのキューに登録されているすべての作業が完了したら、そのスケジュール グループはスケジューラによって破棄されます。
このスケジューラを明示的に作成した場合は、スケジューラ上の参照を解放する前に、スケジューラ内のスケジュール グループへのすべての参照を解放する必要があります。
GetNumberOfVirtualProcessors
スケジューラの現在の仮想プロセッサ数を返します。
virtual unsigned int GetNumberOfVirtualProcessors() const = 0;
戻り値
スケジューラの現在の仮想プロセッサ数。
GetPolicy
スケジューラの作成時に使用されたポリシーのコピーを返します。
virtual SchedulerPolicy GetPolicy() const = 0;
戻り値
スケジューラの作成時に使用されたポリシーのコピー。
Id
スケジューラの一意識別子を返します。
virtual unsigned int Id() const = 0;
戻り値
スケジューラの一意識別子。
IsAvailableLocation
指定された場所がスケジューラ上で使用できるかどうかを判断します。
virtual bool IsAvailableLocation(const location& _Placement) const = 0;
パラメーター
_Placement
スケジューラに照会する場所への参照。
戻り値
_Placement
引数で指定された場所がスケジューラ上で使用できるかどうかを示す値。
解説
戻り値は、指定された場所が使用可能かどうかの瞬間的なサンプリングです。 複数のスケジューラが存在する場合は、動的リソース管理によって、任意の時点でスケジューラのリソースの追加または削除が可能です。 これが発生した場合、指定された場所の可用性が変わる可能性があります。
リファレンス
スケジューラの参照カウントをインクリメントします。
virtual unsigned int Reference() = 0 ;
戻り値
新しくインクリメントされた参照カウント。
解説
これは、合成を目的としてスケジューラの有効期間を管理するために通常使用されます。 スケジューラの参照カウントが 0 になると、スケジューラのすべての処理が完了した後に、スケジューラはシャットダウンし、自身を破棄します。
Reference
メソッドを呼び出す前の参照カウントが 0 だった場合に、スケジューラが所有していないコンテキストから呼び出しが行われると、このメソッドは improper_scheduler_reference 例外をスローします。
RegisterShutdownEvent
スケジューラがシャットダウンし、自身を破棄したときに、_Event
パラメーターで渡された Windows イベント ハンドルに通知します。 イベントに通知された時点で、スケジューラにスケジュールされていたすべての作業が完了します。 このメソッドでは、複数のシャットダウン イベントを登録できます。
virtual void RegisterShutdownEvent(HANDLE _Event) = 0;
パラメーター
_Event
スケジューラがシャットダウンし、自身を破棄したときにランタイムによって通知される Windows イベント オブジェクトのハンドル。
リリース
スケジューラの参照カウントをデクリメントします。
virtual unsigned int Release() = 0;
戻り値
新しくデクリメントされた参照カウント。
解説
これは、合成を目的としてスケジューラの有効期間を管理するために通常使用されます。 スケジューラの参照カウントが 0 になると、スケジューラのすべての処理が完了した後に、スケジューラはシャットダウンし、自身を破棄します。
ResetDefaultSchedulerPolicy
既定のスケジューラ ポリシーをランタイムの既定のポリシーにリセットします。 次回、既定のスケジューラが作成されたときに、ランタイムの既定のポリシー設定が使用されます。
static void __cdecl ResetDefaultSchedulerPolicy();
解説
このメソッドは、プロセス内に既定のスケジューラが存在するときに呼び出すことができます。 既存の既定のスケジューラのポリシーには影響しません。 ただし、既定のスケジューラがシャットダウンし、その後、新しい既定のスケジューラが作成された場合、その新しいスケジューラではランタイムの既定のポリシー設定が使用されます。
スケジューラ
Scheduler
クラスのオブジェクトは、ファクトリ メソッドでのみ作成できます。または、暗黙的に作成されます。
Scheduler();
解説
スケジューラを呼び出し元のコンテキストにアタッチする必要があるランタイム関数の多くを使用するときは、プロセスの既定のスケジューラが暗黙的に作成されます。 CurrentScheduler
クラス内のメソッドと PPL およびエージェント層の機能は、通常、暗黙的なアタッチを実行します。
CurrentScheduler::Create
メソッドまたは Scheduler::Create
メソッドを使用して、スケジューラを明示的に作成することもできます。
~スケジューラ
Scheduler
クラスのオブジェクトは、そのオブジェクトへのすべての外部参照が存在しなくなると、暗黙的に破棄されます。
virtual ~Scheduler();
ScheduleTask
スケジューラ内の軽量タスクをスケジュールします。 軽量タスクは、ランタイムによって決定されるスケジュール グループ内に配置されます。 パラメーター _Placement
を取るバージョンでは、指定された場所でタスクが実行されるようにバイアスがかかります。
virtual void ScheduleTask(
TaskProc _Proc,
_Inout_opt_ void* _Data) = 0;
virtual void ScheduleTask(
TaskProc _Proc,
_Inout_opt_ void* _Data,
location& _Placement) = 0;
パラメーター
_Proc
軽量タスクの本体を実行するために実行する関数へのポインター。
_Data
タスクの本体にパラメーターとして渡されるデータへの void ポインター。
_Placement
軽量タスクが実行されるようにバイアスがかかる場所への参照。
SetDefaultSchedulerPolicy
ユーザー定義のポリシーを使用して既定のスケジューラを作成できるようにします。 このメソッドは、プロセス内に既定のスケジューラが存在しない場合にのみ呼び出すことができます。 既定のポリシーが設定されたら、SetDefaultSchedulerPolicy
メソッドまたは ResetDefaultSchedulerPolicy メソッドの次の有効な呼び出しまで有効です。
static void __cdecl SetDefaultSchedulerPolicy(const SchedulerPolicy& _Policy);
パラメーター
_Policy
既定のスケジューラ ポリシーとして設定されるポリシー。
解説
プロセス内に既定のスケジューラが既に存在するときに SetDefaultSchedulerPolicy
メソッドが呼び出された場合、ランタイムは default_scheduler_exists 例外をスローします。