Compartir a través de


Clase Programador de Tareas

Representa una abstracción para un programador del tiempo de ejecución de concurrencia.

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 planificador al contexto de la llamada. Una vez que este método regresa, el contexto de llamada es administrado por el programador, y este programador 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 Sobrecargado 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 (ObtenerNúmeroDeProcesadoresVirtuales) 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.
RegistrarEventoDeApagado Hace que se active el controlador de eventos de Windows pasado en el parámetro _Event cuando el programador se apague y se destruya. 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.
Lanzamiento Disminuye el contador de referencias del programador.
ResetDefaultSchedulerPolicy Restablece la política predeterminada del planificador al valor predeterminado de tiempo de ejecución. La próxima vez que se cree un programador predeterminado, usará la configuración de directiva predeterminada del runtime.
ScheduleTask Sobrecargado Programa una tarea ligera dentro del programador. La tarea ligera se colocará en un grupo de programación determinado por el tiempo de ejecución. 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 entorno de ejecución de simultaneidad utiliza 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 ha puesto en cola. En cualquier momento, el nivel de concurrencia de un planificador es igual al número de procesadores virtuales que le concede el Gestor de Recursos. 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 un único contexto de planificador puede ejecutarse en un procesador virtual en un momento dado.

El tiempo de ejecución 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

Adjuntar

Adjunta el planificador al contexto de la llamada. Una vez que este método regresa, el contexto de llamada es administrado por el programador, y este programador se convierte en el programador actual.

virtual void Attach() = 0;

Comentarios

Adjuntar un planificador coloca implícitamente una referencia en dicho planificador.

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 generará una excepción improper_scheduler_attach si este programador es el actual programador 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

_Política
Directiva del planificador que describe el comportamiento del planificador recién creado.

Valor devuelto

Puntero a un planificador 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 planificador creado con este método no está vinculado 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.

CrearGrupoDeHorarios

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

_Colocación
Referencia a una ubicación en la que las tareas dentro del grupo de programación tenderán a ejecutarse.

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 Liberar en un grupo de programación cuando haya terminado de programar el trabajo en é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 planificador, debe liberar todas las referencias a los grupos de planificación que contiene antes de liberar sus referencias en el planificador.

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 planificador.

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.

Id

Devuelve un identificador único para el programador.

virtual unsigned int Id() const = 0;

Valor devuelto

Identificador único para el programador.

UbicaciónDisponible

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

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

Parámetros

_Colocación
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 planificadores, la gestión dinámica de recursos puede agregar o quitar recursos de los planificadores 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 el ciclo de vida del planificador 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 active el controlador de eventos de Windows pasado en el parámetro _Event cuando el programador se apague y se destruya. 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 será señalado por el entorno de ejecución cuando el programador se apague y se destruya.

Lanzamiento

Disminuye el contador de referencias del programador.

virtual unsigned int Release() = 0;

Valor devuelto

Recuento de referencias nuevamente reducido.

Comentarios

Esto se usa normalmente para administrar el ciclo de vida del planificador de 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 política predeterminada del planificador al valor predeterminado de tiempo de ejecución. 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 planificador predeterminado se apagara y se creara un nuevo planificador predeterminado en un momento posterior, el nuevo planificador usaría la configuración de directiva predeterminada del entorno de ejecución.

Planificador

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 funciones de las capas de PPL y agentes suelen realizar 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.

~Planificador

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 tiempo de ejecución. 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 para ejecutar al 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.

_Colocación
Referencia a una ubicación hacia la cual se inclinará la ejecución de una tarea liviana.

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

_Política
La política que se establecerá como la política predeterminada del planificador.

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

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