Scheduler (Clase)

Representa una abstracción para un programador del runtime de simultaneidad.

Sintaxis

class Scheduler;

Miembros

Constructores protegidos

Nombre Descripción
Scheduler Un objeto de la clase Scheduler solo se puede crear mediante Factory Method o implícitamente.
~Scheduler Destructor Un objeto de la clase Scheduler se destruye implícitamente cuando todas las referencias externas a él dejan de existir.

Métodos públicos

Nombre Descripción
Adjuntar Adjunta el programador al contexto de llamada. Una vez que este método vuelve, el programador administra el contexto de llamada y se convierte en el programador actual.
Crear Crea un nuevo programador cuyo comportamiento se describe mediante el parámetro _Policy, coloca una referencia inicial en el programador y devuelve un puntero a él.
CreateScheduleGroup Con sobrecarga. Crea un nuevo grupo de programación dentro del programador. La versión que toma el parámetro _Placement hace que las tareas del grupo de programación recién creado estén sesgadas a ejecutarse en la ubicación especificada por ese parámetro.
GetNumberOfVirtualProcessors Devuelve el número actual de procesadores virtuales para el programador.
GetPolicy Devuelve una copia de la directiva con la que se creó el programador.
Id Devuelve un identificador único para el programador.
IsAvailableLocation Determina si una ubicación determinada está disponible en el programador.
Referencia Incrementa el recuento de referencias del programador.
RegisterShutdownEvent Hace que se señale al manipulador de eventos de Windows superado en el parámetro _Event cuando el programador se apague y se autodestruya. En el momento en que se señala el evento, se completa todo el trabajo que se había programado para el programador. Se pueden registrar varios eventos de apagado a través de este método.
Versión Disminuye el contador de referencias del programador.
ResetDefaultSchedulerPolicy Restablece la directiva predeterminada del programador al valor predeterminado de runtime. La próxima vez que se cree un programador predeterminado, usará la configuración de directiva predeterminada del runtime.
ScheduleTask Con sobrecarga. Programa una tarea ligera dentro del programador. La tarea ligera se colocará en un grupo de programación determinado por el runtime. La versión que toma el parámetro _Placement hace que la tarea esté sesgada hacia la ejecución en la ubicación especificada.
SetDefaultSchedulerPolicy Permite usar una directiva definida por el usuario para crear el programador predeterminado. Solo se puede llamar a este método cuando no existe ningún programador predeterminado dentro del proceso. Una vez establecida una directiva predeterminada, permanece en vigor hasta la siguiente llamada válida al método SetDefaultSchedulerPolicy o al método ResetDefaultSchedulerPolicy.

Comentarios

El Runtime de simultaneidad usa contextos de ejecución que se asignan a los contextos de ejecución del sistema operativo, como un subproceso, para ejecutar el trabajo que la aplicación pone en cola en él. En cualquier momento, el nivel de simultaneidad de un programador es igual al número de procesadores virtuales que haya concedido Resource Manager. Un procesador virtual es una abstracción para un recurso de procesamiento y se asigna a un subproceso del hardware en el sistema subyacente. Solo se puede ejecutar un único contexto del programador en un procesador virtual a una hora determinada.

El Runtime de simultaneidad creará un programador predeterminado por proceso para ejecutar el trabajo paralelo. Además, puede crear sus propias instancias del programador y manipularlas mediante esta clase.

Jerarquía de herencia

Scheduler

Requisitos

Encabezado: concrt.h

Espacio de nombres: simultaneidad

Attach

Adjunta el programador al contexto de llamada. Una vez que este método vuelve, el programador administra el contexto de llamada y se convierte en el programador actual.

virtual void Attach() = 0;

Comentarios

Adjuntar un programador coloca implícitamente una referencia en el programador.

En algún momento en el futuro, debe llamar al método CurrentScheduler::Detach para permitir que el programador se apague.

Si se llama a este método desde un contexto que ya está asociado a un programador diferente, el programador existente se recuerda como el programador anterior y el programador recién creado se convierte en el programador actual. Cuando se llama al método CurrentScheduler::Detach en un momento posterior, el programador anterior se restaura como el programador actual.

Este método producirá una excepción improper_scheduler_attach si este programador es el programador actual del contexto de llamada.

Crear

Crea un nuevo programador cuyo comportamiento se describe mediante el parámetro _Policy, coloca una referencia inicial en el programador y devuelve un puntero a él.

static Scheduler* __cdecl Create(const SchedulerPolicy& _Policy);

Parámetros

_Policy
Directiva de programador que describe el comportamiento del programador recién creado.

Valor devuelto

Puntero para un programador recién creado. Este objeto Scheduler tiene un recuento de referencias inicial colocado en él.

Comentarios

Después de crear un programador con el método Create, debe llamar al método Release en algún momento en el futuro para quitar el recuento de referencias inicial y permitir que el programador se apague.

Un programador creado con este método no se adjunta al contexto de llamada. Se puede adjuntar a un contexto mediante el método Adjuntar.

Este método puede producir una variedad de excepciones, incluidas scheduler_resource_allocation_error e invalid_scheduler_policy_value.

CreateScheduleGroup

Crea un nuevo grupo de programación dentro del programador. La versión que toma el parámetro _Placement hace que las tareas del grupo de programación recién creado estén sesgadas a ejecutarse en la ubicación especificada por ese parámetro.

virtual ScheduleGroup* CreateScheduleGroup() = 0;

virtual ScheduleGroup* CreateScheduleGroup(location& _Placement) = 0;

Parámetros

_Placement
Referencia a una ubicación en la que las tareas dentro del grupo de programación se inclinarán hacia la ejecución.

Valor devuelto

Puntero para el grupo de programación recién creado. Este objeto ScheduleGroup tiene un recuento de referencias inicial colocado en él.

Comentarios

Debe invocar el método Versión en un grupo de programación cuando haya terminado de programar el trabajo para él. El programador destruirá el grupo de programación cuando se haya completado todo el trabajo en cola en él.

Tenga en cuenta que si creó explícitamente este programador, debe liberar todas las referencias a los grupos de programación que contiene, antes de liberar las referencias en el programador.

GetNumberOfVirtualProcessors

Devuelve el número actual de procesadores virtuales para el programador.

virtual unsigned int GetNumberOfVirtualProcessors() const = 0;

Valor devuelto

Número actual de procesadores virtuales para el programador.

GetPolicy

Devuelve una copia de la directiva con la que se creó el programador.

virtual SchedulerPolicy GetPolicy() const = 0;

Valor devuelto

Copia de la directiva con la que se creó el programador.

Identificador

Devuelve un identificador único para el programador.

virtual unsigned int Id() const = 0;

Valor devuelto

Identificador único para el programador.

IsAvailableLocation

Determina si una ubicación determinada está disponible en el programador.

virtual bool IsAvailableLocation(const location& _Placement) const = 0;

Parámetros

_Placement
Referencia a la ubicación sobre la que se consulta al programador.

Valor devuelto

Indicación de si la ubicación especificada por el argumento _Placement está disponible en el programador.

Comentarios

Tenga en cuenta que el valor devuelto es un muestreo instantáneo de si la ubicación especificada está disponible. En presencia de varios programadores, la administración de recursos dinámica puede agregar o quitar recursos de los programadores en cualquier momento. En caso de que esto suceda, la ubicación especificada puede cambiar la disponibilidad.

Referencia

Incrementa el recuento de referencias del programador.

virtual unsigned int Reference() = 0 ;

Valor devuelto

Recuento de referencias recién incrementado.

Comentarios

Esto se usa normalmente para administrar la duración del programador para la composición. Cuando el recuento de referencias de un programador cae a cero, el programador se apagará y se autodestruirá una vez que se haya completado todo el trabajo en el programador.

El método producirá una excepción improper_scheduler_reference si el recuento de referencias antes de llamar al método Reference fue cero y la llamada se realiza desde un contexto que no es propiedad del programador.

RegisterShutdownEvent

Hace que se señale al manipulador de eventos de Windows superado en el parámetro _Event cuando el programador se apague y se autodestruya. En el momento en que se señala el evento, se completa todo el trabajo que se había programado para el programador. Se pueden registrar varios eventos de apagado a través de este método.

virtual void RegisterShutdownEvent(HANDLE _Event) = 0;

Parámetros

_Event
Identificador de un objeto de evento de Windows que el runtime señalará cuando el programador se apague y se autodestruya.

Release

Disminuye el contador de referencias del programador.

virtual unsigned int Release() = 0;

Valor devuelto

Recuento de referencias recién reducido.

Comentarios

Esto se usa normalmente para administrar la duración del programador para la composición. Cuando el recuento de referencias de un programador cae a cero, el programador se apagará y se autodestruirá una vez que se haya completado todo el trabajo en el programador.

ResetDefaultSchedulerPolicy

Restablece la directiva predeterminada del programador al valor predeterminado de runtime. La próxima vez que se cree un programador predeterminado, usará la configuración de directiva predeterminada del runtime.

static void __cdecl ResetDefaultSchedulerPolicy();

Comentarios

Se puede llamar a este método mientras exista un programador predeterminado dentro del proceso. No afectará a la directiva del programador predeterminado existente. Sin embargo, si el programador predeterminado se apagara y se creara un nuevo valor predeterminado en un momento posterior, el nuevo programador usaría la configuración de directiva predeterminada del runtime.

Scheduler

Un objeto de la clase Scheduler solo se puede crear mediante Factory Method o implícitamente.

Scheduler();

Comentarios

El programador predeterminado del proceso se crea implícitamente cuando se usan muchas de las funciones de runtime que requieren que un programador esté asociado al contexto de llamada. Los métodos en la clase CurrentScheduler y las características de las capas de agentes y PPL suelen realizar datos adjuntos implícitos.

También puede crear un programador explícitamente a través del método CurrentScheduler::Create o el método Scheduler::Create.

~Programador

Un objeto de la clase Scheduler se destruye implícitamente cuando todas las referencias externas a él dejan de existir.

virtual ~Scheduler();

ScheduleTask

Programa una tarea ligera dentro del programador. La tarea ligera se colocará en un grupo de programación determinado por el runtime. La versión que toma el parámetro _Placement hace que la tarea esté sesgada hacia la ejecución en la ubicación especificada.

virtual void ScheduleTask(
    TaskProc _Proc,
    _Inout_opt_ void* _Data) = 0;

virtual void ScheduleTask(
    TaskProc _Proc,
    _Inout_opt_ void* _Data,
    location& _Placement) = 0;

Parámetros

_Proc
Un puntero a la función por ejecutar para realizar el cuerpo de la tarea ligera.

_Data
Puntero nulo para los datos que se pasarán como parámetro al cuerpo de la tarea.

_Placement
Referencia a una ubicación en la que se sesgará una tarea ligera para que se ejecute.

SetDefaultSchedulerPolicy

Permite usar una directiva definida por el usuario para crear el programador predeterminado. Solo se puede llamar a este método cuando no existe ningún programador predeterminado dentro del proceso. Una vez establecida una directiva predeterminada, permanece en vigor hasta la siguiente llamada válida al método SetDefaultSchedulerPolicy o al método ResetDefaultSchedulerPolicy.

static void __cdecl SetDefaultSchedulerPolicy(const SchedulerPolicy& _Policy);

Parámetros

_Policy
Directiva que se va a establecer como predeterminada del programador.

Comentarios

Si se llama al método SetDefaultSchedulerPolicy cuando ya existe un programador predeterminado dentro del proceso, el runtime producirá una excepción default_scheduler_exists.

Consulte también

concurrency (espacio de nombres)
Scheduler (clase)
PolicyElementKey
Programador de tareas