Compartir a través de


IThreadProxy (Estructura)

Una abstracción para un subproceso de ejecución. Dependiendo de la clave de directiva SchedulerType del programador que usted crea, el Administrador de recursos le concederá un proxy de hilo respaldado por un hilo regular de Win32 o por un hilo programable en 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 proxies de hilos se acoplan a los contextos de ejecución representados por la interfaz IExecutionContext como medio para distribuir el trabajo.

Jerarquía de herencia

IThreadProxy

Requisitos

Encabezado: concrtrm.h

Espacio de nombres: simultaneidad

Método GetId de IThreadProxy

Devuelve un identificador único del proxy del subproceso.

virtual unsigned int GetId() const = 0;

Valor devuelto

Identificador entero único.

Método SwitchOut de IThreadProxy

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 cambio. 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 unidad raíz de procesador virtual, la llamada regresará inmediatamente o bloqueará el proxy de hilo asociado al contexto. Es un error llamar a SwitchOut con el parámetro establecido en Idle. Al hacerlo, se producirá una excepción invalid_argument.

SwitchOut resulta útil cuando desea reducir la cantidad de raíces de procesador virtual que tiene su programador, ya sea porque el administrador de recursos le ha indicado que lo haga, o porque solicitó temporalmente una raíz de procesador virtual sobrecargada 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 en el programador una raíz diferente del procesador virtual 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.

Se puede utilizar SwitchOut cuando se desea reinicializar el procesador virtual para que pueda activarse en el futuro, ya sea bloqueando el proxy del hilo o desasociándolo temporalmente de la raíz del procesador virtual en el que se está ejecutando, y del programador para el que está gestionando tareas. Utilice SwitchOut con el parámetro switchState configurado 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 cuando desee desconectar temporalmente este proxy de hilo de la raíz del procesador virtual en el que se está ejecutando, y del planificador con el que está asociado el procesador virtual. Llamar a SwitchOut con el parámetro switchState establecido en Nesting cuando se está ejecutando en una raíz del procesador virtual hará que la raíz se reinicie y que el proxy del hilo actual siga ejecutándose sin necesitar otro. Se considera que el proxy del subproceso ha dejado el planificador hasta que llama al método IThreadProxy::SwitchOut con Blocking en otro momento. La segunda llamada a SwitchOut con el parámetro establecido en Blocking tiene como objetivo devolver el contexto a un estado bloqueado para que pueda ser reanudado por SwitchTo o IVirtualProcessorRoot::Activate en el planificador del que se había desasociado. 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ándolo 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 cambio. 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 del hilo 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 al Administrador de Recursos, y se espera que se devuelva desde el método Dispatch del contexto de ejecución poco después de que SwitchTo devuelva, 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 configurado en Blocking, el contexto de ejecución pContext comenzará a ejecutarse y bloqueará el proxy del hilo actual hasta que sea reanudado. El programador conserva la propiedad del proxy de subproceso cuando el proxy de subproceso 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.

Utilice el valor Nesting cuando quiera desasociar temporalmente este proxy de subproceso de la raíz del procesador virtual en el que se está ejecutando y del planificador para el que está gestionando tareas. 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 planificador hasta que llama al método IThreadProxy::SwitchOut más adelante. El método IThreadProxy::SwitchOut podría bloquear el proxy de subproceso hasta que hubiera un núcleo procesador virtual disponible para reasignarlo.

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 lanza 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 esperado de cambiar a otro hilo listo 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

espacio de nombres de concurrencia
IExecutionContext (estructura)
IScheduler (estructura)
IVirtualProcessorRoot (estructura)