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. |
Riferimento | 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
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.
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
_Collocamento
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
_Collocamento
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à.
_Collocamento
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