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
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.
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.
Id
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.
Versión
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