Share via


Classe Scheduler

Rappresenta un'astrazione per un'utilità di pianificazione del runtime di concorrenza.

Sintassi

class Scheduler;

Membri

Costruttori protetti

Nome Descrizione
Utilità di pianificazione Un oggetto della Scheduler classe può essere creato solo usando metodi factory o in modo implicito.
Distruttore ~Scheduler Un oggetto della Scheduler classe viene eliminato in modo implicito quando tutti i riferimenti esterni a esso cessano di esistere.

Metodi pubblici

Nome Descrizione
Collega Collega l'utilità di pianificazione al contesto chiamante. Al termine di questo metodo, il contesto chiamante viene gestito dall'utilità di pianificazione e l'utilità di pianificazione diventa l'utilità di pianificazione corrente.
Crea Crea un nuovo utilità di pianificazione il _Policy cui comportamento è descritto dal parametro , inserisce un riferimento iniziale nell'utilità di pianificazione e restituisce un puntatore a esso.
CreateScheduleGroup Con overload. Crea un nuovo gruppo di pianificazione all'interno dell'utilità di pianificazione. La versione che accetta il parametro _Placement causa la distorsione delle attività all'interno del gruppo di pianificazione appena creato verso l'esecuzione nel percorso specificato da tale parametro.
GetNumberOfVirtualProcessors Restituisce il numero corrente di processori virtuali per l'utilità di pianificazione.
GetPolicy Restituisce una copia dei criteri con cui è stato creato l'utilità di pianificazione.
Id Restituisce un identificatore univoco per l'utilità di pianificazione.
IsAvailableLocation Determina se una determinata posizione è disponibile nell'utilità di pianificazione.
Reference Incrementa il conteggio dei riferimenti dell'utilità di pianificazione.
RegisterShutdownEvent Fa in modo che l'handle eventi di Windows passato nel _Event parametro venga segnalato quando l'utilità di pianificazione si arresta ed elimina se stessa. Al momento della segnalazione dell'evento, tutto il lavoro pianificato per l'utilità di pianificazione è stato completato. È possibile registrare più eventi di arresto tramite questo metodo.
Versione Decrementa il conteggio di riferimenti dell'utilità di pianificazione.
ResetDefaultSchedulerPolicy Reimposta il criterio predefinito dell'utilità di pianificazione sul valore predefinito di runtime. La volta successiva che viene creata un'utilità di pianificazione predefinita, userà le impostazioni predefinite del runtime.
ScheduleTask Con overload. Pianifica un'attività leggera all'interno dell'utilità di pianificazione. L'attività leggera sarà posizionata in un gruppo di pianificazione determinato dal runtime. La versione che accetta il parametro _Placement comporta che per l'attività venga data priorità all'esecuzione nella posizione specificata.
SetDefaultSchedulerPolicy Consente di usare un criterio definito dall'utente per creare l'utilità di pianificazione predefinita. Questo metodo può essere chiamato solo quando non esiste alcuna utilità di pianificazione predefinita all'interno del processo. Dopo aver impostato un criterio predefinito, rimane attivo fino alla successiva chiamata valida a SetDefaultSchedulerPolicy o al metodo ResetDefaultSchedulerPolicy .

Osservazioni:

L'utilità di pianificazione del runtime di concorrenza usa contesti di esecuzione, che eseguono il mapping ai contesti di esecuzione del sistema operativo, ad esempio un thread, per eseguire il lavoro accodato dall'applicazione. In qualsiasi momento, il livello di concorrenza di un'utilità di pianificazione è uguale al numero di processori virtuali concessi da Resource Manager. Un processore virtuale è un'astrazione per una risorsa di elaborazione ed esegue il mapping a un thread hardware nel sistema sottostante. Solo un singolo contesto dell'utilità di pianificazione può essere eseguito in un processore virtuale in un determinato momento.

Il runtime di concorrenza creerà un'utilità di pianificazione predefinita per ogni processo per eseguire il lavoro parallelo. Inoltre, è possibile creare istanze dell'utilità di pianificazione personalizzate e modificarle usando questa classe.

Gerarchia di ereditarietà

Scheduler

Requisiti

Intestazione: concrt.h

Spazio dei nomi: Concurrency

Collegamento

Collega l'utilità di pianificazione al contesto chiamante. Al termine di questo metodo, il contesto chiamante viene gestito dall'utilità di pianificazione e l'utilità di pianificazione diventa l'utilità di pianificazione corrente.

virtual void Attach() = 0;

Osservazioni:

Il collegamento di un'utilità di pianificazione inserisce in modo implicito un riferimento nell'utilità di pianificazione.

A un certo punto in futuro, è necessario chiamare il metodo CurrentScheduler::D etach per consentire all'utilità di pianificazione di arrestare.

Se questo metodo viene chiamato da un contesto già collegato a un'utilità di pianificazione diversa, l'utilità di pianificazione esistente viene memorizzata come utilità di pianificazione precedente e l'utilità di pianificazione appena creata diventa l'utilità di pianificazione corrente. Quando si chiama il CurrentScheduler::Detach metodo in un secondo momento, l'utilità di pianificazione precedente viene ripristinata come utilità di pianificazione corrente.

Questo metodo genererà un'eccezione improper_scheduler_attach se l'utilità di pianificazione è l'utilità di pianificazione corrente del contesto chiamante.

Creazione

Crea un nuovo utilità di pianificazione il _Policy cui comportamento è descritto dal parametro , inserisce un riferimento iniziale nell'utilità di pianificazione e restituisce un puntatore a esso.

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

Parametri

_Politica
Criteri dell'utilità di pianificazione che descrivono il comportamento dell'utilità di pianificazione appena creata.

Valore restituito

Puntatore a un'utilità di pianificazione appena creata. Questo Scheduler oggetto ha un conteggio dei riferimenti iniziale posizionato su di esso.

Osservazioni:

Dopo aver creato un'utilità di pianificazione con il Create metodo , è necessario chiamare il Release metodo in un determinato momento in futuro per rimuovere il conteggio dei riferimenti iniziale e consentire all'utilità di pianificazione di arrestarsi.

Un'utilità di pianificazione creata con questo metodo non è collegata al contesto chiamante. Può essere collegato a un contesto usando il metodo Attach .

Questo metodo può generare diverse eccezioni, tra cui scheduler_resource_allocation_error e invalid_scheduler_policy_value.

CreateScheduleGroup

Crea un nuovo gruppo di pianificazione all'interno dell'utilità di pianificazione. La versione che accetta il parametro _Placement causa la distorsione delle attività all'interno del gruppo di pianificazione appena creato verso l'esecuzione nel percorso specificato da tale parametro.

virtual ScheduleGroup* CreateScheduleGroup() = 0;

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

Parametri

_Posizionamento
Riferimento a una posizione in cui le attività all'interno del gruppo di pianificazione saranno distorte verso l'esecuzione in.

Valore restituito

Puntatore al gruppo di pianificazione appena creato. Questo ScheduleGroup oggetto ha un conteggio dei riferimenti iniziale posizionato su di esso.

Osservazioni:

È necessario richiamare il metodo Release in un gruppo di pianificazione al termine della pianificazione. L'utilità di pianificazione eliminerà definitivamente il gruppo di pianificazione al termine di tutte le operazioni in coda.

Si noti che se l'utilità di pianificazione è stata creata in modo esplicito, è necessario rilasciare tutti i riferimenti ai gruppi di pianificazione al suo interno, prima di rilasciare i riferimenti nell'utilità di pianificazione.

GetNumberOfVirtualProcessors

Restituisce il numero corrente di processori virtuali per l'utilità di pianificazione.

virtual unsigned int GetNumberOfVirtualProcessors() const = 0;

Valore restituito

Numero corrente di processori virtuali per l'utilità di pianificazione.

GetPolicy

Restituisce una copia dei criteri con cui è stato creato l'utilità di pianificazione.

virtual SchedulerPolicy GetPolicy() const = 0;

Valore restituito

Copia dei criteri con cui è stata creata l'utilità di pianificazione.

ID.

Restituisce un identificatore univoco per l'utilità di pianificazione.

virtual unsigned int Id() const = 0;

Valore restituito

Identificatore univoco per l'utilità di pianificazione.

IsAvailableLocation

Determina se una determinata posizione è disponibile nell'utilità di pianificazione.

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

Parametri

_Posizionamento
Riferimento alla posizione in cui eseguire una query sull'utilità di pianificazione.

Valore restituito

Indica se la posizione specificata dall'argomento è disponibile nell'utilità _Placement di pianificazione.

Osservazioni:

Si noti che il valore restituito è un campionamento istantaneo dell'eventuale disponibilità della posizione specificata. In presenza di più utilità di pianificazione, tramite la gestione delle risorse dinamiche è possibile aggiungere o sottrarre risorse dalle utilità di pianificazione in qualsiasi punto. In questo caso, la disponibilità della posizione specificata può cambiare.

Riferimento

Incrementa il conteggio dei riferimenti dell'utilità di pianificazione.

virtual unsigned int Reference() = 0 ;

Valore restituito

Conteggio dei riferimenti appena incrementato.

Osservazioni:

Viene in genere usato per gestire la durata dell'utilità di pianificazione per la composizione. Quando il conteggio di riferimenti di un'utilità di pianificazione scende a zero, l'utilità di pianificazione si arresterà e si distruggerà dopo che tutto il lavoro nell'utilità di pianificazione sarà stato completato.

Il metodo genererà un'eccezione improper_scheduler_reference se il conteggio dei riferimenti prima di chiamare il Reference metodo era zero e la chiamata viene eseguita da un contesto non di proprietà dell'utilità di pianificazione.

RegisterShutdownEvent

Fa in modo che l'handle eventi di Windows passato nel _Event parametro venga segnalato quando l'utilità di pianificazione si arresta ed elimina se stessa. Al momento della segnalazione dell'evento, tutto il lavoro pianificato per l'utilità di pianificazione è stato completato. È possibile registrare più eventi di arresto tramite questo metodo.

virtual void RegisterShutdownEvent(HANDLE _Event) = 0;

Parametri

_Evento
Handle per un oggetto evento di Windows che verrà segnalato dal runtime quando l'utilità di pianificazione si arresta ed elimina se stessa.

Rilascio

Decrementa il conteggio di riferimenti dell'utilità di pianificazione.

virtual unsigned int Release() = 0;

Valore restituito

Conteggio dei riferimenti appena decrementato.

Osservazioni:

Viene in genere usato per gestire la durata dell'utilità di pianificazione per la composizione. Quando il conteggio di riferimenti di un'utilità di pianificazione scende a zero, l'utilità di pianificazione si arresterà e si distruggerà dopo che tutto il lavoro nell'utilità di pianificazione sarà stato completato.

ResetDefaultSchedulerPolicy

Reimposta il criterio predefinito dell'utilità di pianificazione sul valore predefinito di runtime. La volta successiva che viene creata un'utilità di pianificazione predefinita, userà le impostazioni predefinite del runtime.

static void __cdecl ResetDefaultSchedulerPolicy();

Osservazioni:

Questo metodo può essere chiamato mentre esiste un'utilità di pianificazione predefinita all'interno del processo. Non influirà sui criteri dell'utilità di pianificazione predefinita esistente. Tuttavia, se l'utilità di pianificazione predefinita dovesse arrestarsi e un nuovo valore predefinito doveva essere creato in un secondo momento, la nuova utilità di pianificazione utilizzerebbe le impostazioni predefinite del runtime.

Utilità di pianificazione

Un oggetto della Scheduler classe può essere creato solo usando metodi factory o in modo implicito.

Scheduler();

Osservazioni:

L'utilità di pianificazione predefinita del processo viene creata in modo implicito quando si utilizzano molte funzioni di runtime che richiedono che un'utilità di pianificazione sia collegata al contesto chiamante. I metodi all'interno della CurrentScheduler classe e delle funzionalità dei livelli PPL e agenti in genere eseguono allegati impliciti.

È anche possibile creare un'utilità di pianificazione in modo esplicito tramite il CurrentScheduler::Create metodo o il Scheduler::Create metodo .

~Pianificazione

Un oggetto della Scheduler classe viene eliminato in modo implicito quando tutti i riferimenti esterni a esso cessano di esistere.

virtual ~Scheduler();

ScheduleTask

Pianifica un'attività leggera all'interno dell'utilità di pianificazione. L'attività leggera sarà posizionata in un gruppo di pianificazione determinato dal runtime. La versione che accetta il parametro _Placement comporta che per l'attività venga data priorità all'esecuzione nella posizione specificata.

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

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

Parametri

_Proc
Puntatore alla funzione da eseguire per eseguire il corpo dell'attività leggera.

_Dati
Puntatore void ai dati che verranno passati come parametro al corpo dell'attività.

_Posizionamento
Riferimento a una posizione in cui per l'attività leggera verrà data priorità all'esecuzione.

SetDefaultSchedulerPolicy

Consente di usare un criterio definito dall'utente per creare l'utilità di pianificazione predefinita. Questo metodo può essere chiamato solo quando non esiste alcuna utilità di pianificazione predefinita all'interno del processo. Dopo aver impostato un criterio predefinito, rimane attivo fino alla successiva chiamata valida a SetDefaultSchedulerPolicy o al metodo ResetDefaultSchedulerPolicy .

static void __cdecl SetDefaultSchedulerPolicy(const SchedulerPolicy& _Policy);

Parametri

_Politica
Criterio da impostare come criterio dell'utilità di pianificazione predefinito.

Osservazioni:

Se il SetDefaultSchedulerPolicy metodo viene chiamato quando esiste già un'utilità di pianificazione predefinita all'interno del processo, il runtime genererà un'eccezione default_scheduler_exists .

Vedi anche

Spazio dei nomi concurrency
Classe Scheduler
PolicyElementKey
Utilità di pianificazione