IThreadProxy (Estructura)
Una abstracción para un subproceso de ejecución. Dependiendo de la clave de directiva SchedulerType
del programador que se crea, el Administrador de recursos concederá al usuario un proxy del subproceso que está respaldado por un subproceso de Win32 normal o por un subproceso programable de modo de usuario (UMS). Los subprocesos UMS se admiten en sistemas operativos de 64 bits con Windows 7 o una versión posterior.
Sintaxis
struct IThreadProxy;
Miembros
Métodos públicos
Nombre | Descripción |
---|---|
IThreadProxy::GetId | Devuelve un identificador único del proxy del subproceso. |
IThreadProxy::SwitchOut | Desasocia el contexto de la raíz del procesador virtual subyacente. |
IThreadProxy::SwitchTo | Realiza un cambio de contexto cooperativo del contexto en ejecución actual a otro diferente. |
IThreadProxy::YieldToSystem | Hace que el subproceso que realiza la llamada ceda la ejecución a otro subproceso que está listo para ejecutarse en el procesador actual. El sistema operativo selecciona el siguiente subproceso que se va a ejecutar. |
Comentarios
Los servidores proxy de subprocesos se acoplan a los contextos de ejecución representados por la interfaz IExecutionContext
como medio de enviar trabajo.
Jerarquía de herencia
IThreadProxy
Requisitos
Encabezado: concrtrm.h
Espacio de nombres: simultaneidad
IThreadProxy::GetId (Método)
Devuelve un identificador único del proxy del subproceso.
virtual unsigned int GetId() const = 0;
Valor devuelto
Identificador entero único.
IThreadProxy::SwitchOut (Método)
Desasocia el contexto de la raíz del procesador virtual subyacente.
virtual void SwitchOut(SwitchingProxyState switchState = Blocking) = 0;
Parámetros
switchState
Indica el estado del proxy del subproceso que está ejecutando el modificador. El parámetro es del tipo SwitchingProxyState
.
Comentarios
Use SwitchOut
si necesita desasociar un contexto de la raíz de procesador virtual en la que se ejecuta, por cualquier razón. En función del valor pasado en el parámetro switchState
, y de si se está ejecutando o no en una raíz de procesador virtual, la llamada volverá inmediatamente o bloqueará el proxy del subproceso asociado al contexto. Es un error llamar a SwitchOut
con el parámetro establecido en Idle
. Si se hace, se produce una excepción invalid_argument.
SwitchOut
resulta útil cuando desea reducir el número de raíces de procesador virtual que tiene su programador, ya sea porque el administrador de recursos ha dado instrucciones de que lo haga, o porque solicitó temporalmente una suscripción excesiva de raíz del procesador virtual y ya ha terminado con ella. En este caso debe invocar al método IVirtualProcessorRoot::Remove en la raíz del procesador virtual antes de realizar una llamada a SwitchOut
con el parámetro switchState
establecido en Blocking
. Esto bloqueará el proxy del subproceso y reanudará la ejecución cuando está disponible una raíz del procesador virtual diferente en el programador para ejecutarlo. El proxy del subproceso de bloqueo se puede reanudar llamando a la función SwitchTo
para cambiar al contexto de ejecución del proxy de este subproceso. También puede reanudar el proxy del subproceso, utilizando su contexto asociado para activar una raíz del procesador virtual. Para obtener más información sobre cómo hacer esto, vea IVirtualProcessorRoot::Activate.
También se puede usar SwitchOut
si desea reinicializar el procesador virtual de forma que se pueda activar en el futuro mientras se bloquea el proxy del subproceso o se desasocia temporalmente este de la raíz del procesador virtual en el que se ejecuta, y del programador para el que está enviando trabajo. Use SwitchOut
con el parámetro switchState
establecido en Blocking
si desea bloquear el proxy del subproceso. Podrá reanudarlo posteriormente mediante SwitchTo
o IVirtualProcessorRoot::Activate
como se indicó anteriormente. Use SwitchOut
con el parámetro establecido en Nesting
si desea desasociar temporalmente este proxy del subproceso de la raíz del procesador virtual en el que se ejecuta, y del programador con el que está asociado el procesador virtual. La llamada a SwitchOut
con el parámetro switchState
establecido en Nesting
mientras se está ejecutando en una raíz del procesador virtual hará que la raíz se reinicialice y que el proxy del subproceso actual continúe ejecutándose sin necesidad. Se considera que el proxy del subproceso ha dejado el programador hasta que llama al método IThreadProxy::SwitchOut con Blocking
posteriormente. La segunda llamada a SwitchOut
con el parámetro establecido en Blocking
tiene por objeto devolver el contexto a un estado bloqueado para que lo pueda reanudar SwitchTo
o IVirtualProcessorRoot::Activate
en el programador del que se desasoció. Dado que no estaba ejecutando en una raíz del procesador virtual, no se realiza ningún reinicio.
Una raíz del procesador virtual reinicializada no es distinta de una nueva raíz del procesador virtual que el Administrador de recursos concede al programador. Puede usarlo para la ejecución activándola con un contexto de ejecución mediante IVirtualProcessorRoot::Activate
.
Se debe llamar a SwitchOut
en la interfaz IThreadProxy
que representa el subproceso actualmente en ejecución o los resultados no se definen.
En las bibliotecas y los encabezados incluidos con Visual Studio 2010, este método no tomaba un parámetro y no reinicializaba la raíz del procesador virtual. Para conservar el comportamiento anterior, se proporciona el valor de parámetro predeterminado de Blocking
.
IThreadProxy::SwitchTo (Método)
Realiza un cambio de contexto cooperativo del contexto en ejecución actual a otro diferente.
virtual void SwitchTo(
_Inout_ IExecutionContext* pContext,
SwitchingProxyState switchState) = 0;
Parámetros
pContext
Contexto de ejecución al que cambiar de forma cooperativa.
switchState
Indica el estado del proxy del subproceso que está ejecutando el modificador. El parámetro es del tipo SwitchingProxyState
.
Comentarios
Use este método para cambiar de un contexto de ejecución a otro, desde el método IExecutionContext::Dispatch del primer contexto de ejecución. El método asocia el contexto de ejecución pContext
a un proxy de subproceso, si aún no lo está. La propiedad del proxy de subproceso actual viene determinada por el valor especificado para el argumento switchState
.
Use el valor Idle
cuando quiera devolver el proxy de subproceso en ejecución actualmente a Resource Manager. Al llamar a SwitchTo
con el parámetro switchState
establecido en Idle
se consigue que el contexto de ejecución pContext
empiece a ejecutarse en el recurso de ejecución subyacente. La propiedad de este proxy de subproceso se transfiere a Resource Manager, y se espera que se devuelva desde el método Dispatch
del contexto de ejecución poco después de la devolución de SwitchTo
, con el fin de completar la transferencia. El contexto de ejecución que el proxy de subproceso estaba enviando está desasociado del proxy de subproceso, y el programador es libre de reutilizarlo o destruirlo según le convenga.
Use el valor Blocking
cuando quiera que este proxy de subproceso entre en un estado bloqueado. Al llamar a SwitchTo
con el parámetro switchState
establecido en Blocking
se consigue que el contexto de ejecución pContext
empiece a ejecutarse y bloquee el proxy de subproceso actual hasta que se reanude. El programador conserva la propiedad del proxy de subproceso si está en el estado Blocking
. El proxy del subproceso de bloqueo se puede reanudar llamando a la función SwitchTo
para cambiar al contexto de ejecución del proxy de este subproceso. También puede reanudar el proxy del subproceso, utilizando su contexto asociado para activar una raíz del procesador virtual. Para obtener más información sobre cómo hacer esto, vea IVirtualProcessorRoot::Activate.
Use el valor Nesting
si quiere desasociar temporalmente este proxy de subproceso de la raíz del procesador virtual en el que se ejecuta y del programador para el que está enviando trabajo. Al llamar a SwitchTo
con el parámetro switchState
establecido en Nesting
se consigue que el contexto de ejecución pContext
empiece a ejecutarse y el proxy de subproceso actual también siga ejecutándose sin necesidad de una raíz del procesador virtual. Se considera que el proxy del subproceso ha dejado el programador hasta que llama al método IThreadProxy::SwitchOut posteriormente. El método IThreadProxy::SwitchOut
podría bloquear el proxy de subproceso hasta que hubiera una raíz del procesador virtual disponible para volver a programarlo.
Se debe llamar a SwitchTo
en la interfaz IThreadProxy
que representa el subproceso actualmente en ejecución o los resultados no se definen. La función inicia invalid_argument
si el parámetro pContext
está establecido en NULL
.
IThreadProxy::YieldToSystem (Método)
Hace que el subproceso que realiza la llamada ceda la ejecución a otro subproceso que está listo para ejecutarse en el procesador actual. El sistema operativo selecciona el siguiente subproceso que se va a ejecutar.
virtual void YieldToSystem() = 0;
Comentarios
Cuando lo llama un proxy de subproceso respaldado por un subproceso normal de Windows, YieldToSystem
se comporta exactamente igual que la función SwitchToThread
de Windows. Pero cuando se llama desde subprocesos programables en modo de usuario (UMS), la función SwitchToThread
delega la tarea de seleccionar el siguiente subproceso para que se ejecute en el programador del modo de usuario, no en el sistema operativo. Para lograr el efecto deseado de cambiar a otro subproceso preparado del sistema, use YieldToSystem
.
Se debe llamar a YieldToSystem
en la interfaz IThreadProxy
que representa el subproceso actualmente en ejecución o los resultados no se definen.
Consulte también
concurrency (espacio de nombres)
IExecutionContext (estructura)
IScheduler (estructura)
IVirtualProcessorRoot (estructura)