Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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