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)