CurrentScheduler クラス

呼び出し元コンテキストに関連付けられている現在のスケジューラの抽象化を表します。

構文

class CurrentScheduler;

メンバー

パブリック メソッド

名前 説明
作成 _Policy パラメーターによって動作が記述された新しいスケジューラを作成し、呼び出し元のコンテキストにアタッチします。 新しく作成されたスケジューラは、呼び出し元コンテキストの現在のスケジューラになります。
CreateScheduleGroup 過負荷です。 呼び出し元のコンテキストに関連付けられているスケジューラ内に新しいスケジュール グループを作成します。 _Placement パラメーターを受け取るバージョンによって、新しく作成されたスケジュール グループ内のタスクは、そのパラメーターで指定された場所で実行されるようにバイアスがかかります。
[デタッチ] 現在のスケジューラを呼び出し元のコンテキストからデタッチし、以前アタッチされたスケジューラを現在のスケジューラとして復元します (それが存在する場合)。 このメソッドの復帰後、呼び出し元のコンテキストは、CurrentScheduler::Create メソッドまたは Scheduler::Attach メソッドを使用して以前コンテキストにアタッチされていたスケジューラによって管理されます。
Get 呼び出し元のコンテキストに関連付けられているスケジューラ (現在のスケジューラとも呼ばれます) へのポインターを返します。
GetNumberOfVirtualProcessors 呼び出し元のコンテキストに関連付けられているスケジューラに対する仮想プロセッサの現在の数を返します。
GetPolicy 現在のスケジューラが作成されたポリシーのコピーを返します。
Id 現在のスケジューラの一意識別子を返します。
IsAvailableLocation 指定された場所が現在のスケジューラ上で使用できるかどうかを判断します。
RegisterShutdownEvent 現在のコンテキストに関連付けられているスケジューラがシャットダウンし、自身を破棄したときに、_ShutdownEvent パラメーターで渡された Windows イベント ハンドルに通知します。 イベントに通知された時点で、スケジューラにスケジュールされていたすべての作業が完了します。 このメソッドでは、複数のシャットダウン イベントを登録できます。
ScheduleTask 過負荷です。 呼び出し元のコンテキストに関連付けられているスケジューラ内の軽量タスクをスケジュールします。 軽量タスクは、ランタイムによって決定されるスケジュール グループ内に配置されます。 パラメーター _Placement を取るバージョンでは、指定された場所でタスクが実行されるようにバイアスがかかります。

解説

呼び出し元のコンテキストに関連付けられているスケジューラ (Scheduler に関するページを参照) が存在しない場合、CurrentScheduler クラス内の多くのメソッドによって、プロセスの既定のスケジューラがアタッチされます。 これは、このような呼び出し中に、プロセスの既定のスケジューラが作成されることを意味する場合もあります。

継承階層

CurrentScheduler

必要条件

ヘッダー: concrt.h

名前空間: concurrency

作成

_Policy パラメーターによって動作が記述された新しいスケジューラを作成し、呼び出し元のコンテキストにアタッチします。 新しく作成されたスケジューラは、呼び出し元コンテキストの現在のスケジューラになります。

static void __cdecl Create(const SchedulerPolicy& _Policy);

パラメーター

_Policy
新しく作成されたスケジューラの動作を説明するスケジューラ ポリシー。

解説

スケジューラが呼び出し元のコンテキストにアタッチされると、参照カウントがスケジューラに暗黙的に配置されます。

Create メソッドを使用してスケジューラが作成されたら、スケジューラをシャットダウンできるようにするために、将来のある時点で CurrentScheduler::Detach メソッドを呼び出す必要があります。

このメソッドが、別のスケジューラに既にアタッチされているコンテキストから呼び出された場合、既存のスケジューラは以前のスケジューラとして記憶され、新しく作成されたスケジューラが現在のスケジューラになります。 その後、CurrentScheduler::Detach メソッドを呼び出すと、以前のスケジューラが現在のスケジューラとして復元されます。

このメソッドは、scheduler_resource_allocation_errorinvalid_scheduler_policy_value など、さまざまな例外をスローする可能性があります。

CreateScheduleGroup

呼び出し元のコンテキストに関連付けられているスケジューラ内に新しいスケジュール グループを作成します。 _Placement パラメーターを受け取るバージョンによって、新しく作成されたスケジュール グループ内のタスクは、そのパラメーターで指定された場所で実行されるようにバイアスがかかります。

static ScheduleGroup* __cdecl CreateScheduleGroup();

static ScheduleGroup* __cdecl CreateScheduleGroup(location& _Placement);

パラメーター

_Placement
スケジュール グループ内のタスクが実行されるようにバイアスがかかる場所への参照。

戻り値

新しく作成されたスケジュール グループへのポインター。 この ScheduleGroup オブジェクトには、初期参照カウントが配置されています。

解説

呼び出し元のコンテキストにスケジューラが現在関連付けられていない場合、このメソッドを呼び出すと、プロセスの既定のスケジューラが作成されるか、または呼び出し元コンテキストにアタッチされます。

Release メソッドは、スケジュール グループに対するスケジュール作業の完了時に、スケジュール グループ上で呼び出す必要があります。 スケジュール グループのキューに登録されているすべての作業が完了したら、そのスケジュール グループはスケジューラによって破棄されます。

このスケジューラを明示的に作成した場合は、スケジューラ上でご自身の参照をリリースする前に、現在のコンテキストをスケジューラからデタッチして、その中にあるスケジュール グループへのすべての参照をリリースする必要があることに注意してください。

[デタッチ]

現在のスケジューラを呼び出し元のコンテキストからデタッチし、以前アタッチされたスケジューラを現在のスケジューラとして復元します (それが存在する場合)。 このメソッドの復帰後、呼び出し元のコンテキストは、CurrentScheduler::Create メソッドまたは Scheduler::Attach メソッドを使用して以前コンテキストにアタッチされていたスケジューラによって管理されます。

static void __cdecl Detach();

解説

Detach メソッドは、スケジューラから参照カウントを暗黙的に削除します。

スケジューラが呼び出し元のコンテキストにアタッチされていない場合、このメソッドを呼び出すと、scheduler_not_attached 例外がスローされます。

スケジューラ内部で管理されているコンテキスト、または scheduler::Attach または CurrentScheduler:: Create メソッド以外のメソッドを使ってアタッチされたコンテキストから、このメソッドを呼び出すと、improper_scheduler_detach 例外がスローされます。

Yammer の入手

呼び出し元のコンテキストに関連付けられているスケジューラ (現在のスケジューラとも呼ばれます) へのポインターを返します。

static Scheduler* __cdecl Get();

戻り値

呼び出し元のコンテキストに関連付けられているスケジューラ (現在のスケジューラ) へのポインター。

解説

呼び出し元のコンテキストにスケジューラが現在関連付けられていない場合、このメソッドを呼び出すと、プロセスの既定のスケジューラが作成されるか、または呼び出し元コンテキストにアタッチされます。 このメソッドによって返される Scheduler オブジェクト上では、追加の参照が配置されません。

GetNumberOfVirtualProcessors

呼び出し元のコンテキストに関連付けられているスケジューラに対する仮想プロセッサの現在の数を返します。

static unsigned int __cdecl GetNumberOfVirtualProcessors();

戻り値

スケジューラが呼び出し元のコンテキストに関連付けられている場合は、そのスケジューラの仮想プロセッサの現在の数。それ以外の場合は、値 -1

解説

呼び出し元のコンテキストがまだスケジューラに関連付けられていない場合、このメソッドによってスケジューラはアタッチされません。

このメソッドからの戻り値は、呼び出し元のコンテキストに関連付けられているスケジューラに対する仮想プロセッサの数の瞬間的なサンプリングです。 この値は、返された瞬間に古くなる可能性があります。

GetPolicy

現在のスケジューラが作成されたポリシーのコピーを返します。

static SchedulerPolicy __cdecl GetPolicy();

戻り値

現在のスケジューラが作成されたポリシーのコピー。

解説

呼び出し元のコンテキストにスケジューラが現在関連付けられていない場合、このメソッドを呼び出すと、プロセスの既定のスケジューラが作成されるか、または呼び出し元コンテキストにアタッチされます。

Id

現在のスケジューラの一意識別子を返します。

static unsigned int __cdecl Id();

戻り値

スケジューラが呼び出し元のコンテキストに関連付けられている場合は、そのスケジューラの一意識別子。それ以外の場合は、値 -1

解説

呼び出し元のコンテキストがまだスケジューラに関連付けられていない場合、このメソッドによってスケジューラはアタッチされません。

IsAvailableLocation

指定された場所が現在のスケジューラ上で使用できるかどうかを判断します。

static bool __cdecl IsAvailableLocation(const location& _Placement);

パラメーター

_Placement
現在のスケジューラに照会する場所への参照。

戻り値

_Placement 引数で指定された場所が現在のスケジューラで使用できるかどうかを示す値。

解説

呼び出し元のコンテキストがまだスケジューラに関連付けられていない場合、このメソッドによってスケジューラはアタッチされません。

戻り値は、指定された場所が使用可能かどうかの瞬間的なサンプリングです。 複数のスケジューラが存在する場合は、動的リソース管理によって、任意の時点でスケジューラのリソースの追加または削除が可能です。 これが発生した場合、指定された場所の可用性が変わる可能性があります。

RegisterShutdownEvent

現在のコンテキストに関連付けられているスケジューラがシャットダウンし、自身を破棄したときに、_ShutdownEvent パラメーターで渡された Windows イベント ハンドルに通知します。 イベントに通知された時点で、スケジューラにスケジュールされていたすべての作業が完了します。 このメソッドでは、複数のシャットダウン イベントを登録できます。

static void __cdecl RegisterShutdownEvent(HANDLE _ShutdownEvent);

パラメーター

_ShutdownEvent
現在のコンテキストに関連付けられているスケジューラがシャットダウンし、自身を破棄したときに、ランタイムによって通知される Windows イベント オブジェクトへのハンドル。

解説

スケジューラが呼び出し元のコンテキストにアタッチされていない場合、このメソッドを呼び出すと、scheduler_not_attached 例外がスローされます。

ScheduleTask

呼び出し元のコンテキストに関連付けられているスケジューラ内の軽量タスクをスケジュールします。 軽量タスクは、ランタイムによって決定されるスケジュール グループ内に配置されます。 パラメーター _Placement を取るバージョンでは、指定された場所でタスクが実行されるようにバイアスがかかります。

static void __cdecl ScheduleTask(
    TaskProc _Proc,
    _Inout_opt_ void* _Data);

static void __cdecl ScheduleTask(
    TaskProc _Proc,
    _Inout_opt_ void* _Data,
    location& _Placement);

パラメーター

_Proc
軽量タスクの本体を実行するために実行する関数へのポインター。

_Data
タスクの本体にパラメーターとして渡されるデータへの void ポインター。

_Placement
軽量タスクが実行されるようにバイアスがかかる場所への参照。

解説

呼び出し元のコンテキストにスケジューラが現在関連付けられていない場合、このメソッドを呼び出すと、プロセスの既定のスケジューラが作成されるか、または呼び出し元コンテキストにアタッチされます。

関連項目

コンカレンシー名前空間
Scheduler クラス
PolicyElementKey
タスク スケジューラ