次の方法で共有


IThreadProxy::SwitchOut メソッド

基盤となる仮想プロセッサ ルートからコンテキストを切り離します。

virtual void SwitchOut(
   SwitchingProxyState switchState = Blocking
) =0;

パラメーター

  • switchState
    切り替えを実行しているスレッド プロキシの状態を示します。SwitchingProxyState 型のパラメーター。

解説

使用SwitchOut 、それが実行では、何らかの理由で、プロセッサの仮想ルートからのコンテキストの関連付けを解除する必要がある場合。値によってパラメーターを渡すswitchState、仮想プロセッサ ルート上を実行しているかどうかに関係なく、呼び出しはすぐに戻るか、コンテキストに関連付けられたスレッド プロキシをブロックします。呼び出すと、エラーがSwitchOutのパラメーターを設定Idle。これが、 invalid_argument 例外。

SwitchOutは、リソース マネージャーは、これを行うに指示されてか、一時のオーバーサブスク ライブ仮想プロセッサ ルートを要求し、処理を終了するため、スケジューラがある仮想プロセッサ ルートの数を減らす必要がある場合に役立ちます。この例では、メソッドを呼び出す必要がありますIVirtualProcessorRoot::Removeへの呼び出しを行う前に、仮想プロセッサ ルートのSwitchOutパラメーター switchState設定Blocking。これは、スレッドのプロキシがブロックされ、別の仮想プロセッサ ルートのスケジューラで実行できる場合に実行が再開されます。ブロック状態のスレッド プロキシを再開するには、SwitchTo 関数を呼び出してこのスレッド プロキシの実行コンテキストに切り替えます。関連付けられているコンテキストを使用して仮想プロセッサ ルートをアクティブ化することにより、スレッド プロキシを再開することもできます。この方法の詳細については、IVirtualProcessorRoot::Activate のトピックを参照してください。

SwitchOutプロキシ スレッドをブロックするか、仮想プロセッサ ルートから一時的に切断を実行しているし、スケジューラに作業をディスパッチしている中にすることは可能性がありますので、仮想プロセッサを再初期化するときを使用することもできます。使用SwitchOutのパラメーターをswitchState設定Blockingプロキシ スレッドをブロックしたい場合。いずれかを使用して後で再開できるSwitchToまたはIVirtualProcessorRoot::Activate上記のようにします。使用SwitchOutのパラメーターを設定Nestingこのスレッド プロキシ、実行している、仮想プロセッサ ルートからを一時的に解除して、スケジューラは、仮想プロセッサと関連付けられています。呼び出すSwitchOutのパラメーターをswitchState設定Nesting 、仮想プロセッサ ルート上の実行中にルートを再初期化してなしのいずれかの実行を続行するのには、現在のスレッド プロキシが発生します。スレッド プロキシはそれを呼び出すまで、スケジューラは左と見なされます、 IThreadProxy::SwitchOut メソッドとBlocking 、後の時点で。2 回目SwitchOutパラメーターを設定するにはBlockingで再開することを禁止状態にコンテキストを取得する対象としていますSwitchToまたはIVirtualProcessorRoot::Activateにスケジューラからデタッチします。仮想プロセッサ ルートを実行されていないので、再初期化には実行されません。

再初期化された仮想プロセッサ ルートは、リソース マネージャーは、スケジューラを与え、新しい仮想プロセッサ ルートから同じです。実行、実行コンテキストを使用してのライセンス認証で使用するIVirtualProcessorRoot::Activate

SwitchOut は、現在実行中のスレッドを表す IThreadProxy インターフェイスで呼び出す必要があります。それ以外の場合、結果は保証されません。

Visual Studio 2010 が同梱されているヘッダーとライブラリ、このメソッドは、パラメーターを受け取らないし、仮想プロセッサ ルートを再初期化できません。Visual Studio 2012 に、既定のパラメーター値をアップグレードするときに、以前の動作を維持するためにBlockingを指定します。

必要条件

ヘッダー: concrtrm.h

名前空間: 同時実行

参照

関連項目

IThreadProxy 構造体