Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La classe task_group rappresenta una raccolta di lavoro parallelo che può essere messa in attesa o annullata.
Sintassi
class task_group;
Membri
Costruttori pubblici
| Nome | Descrizione |
|---|---|
| task_group | Sovraccarico. Costruisce un oggetto task_group nuovo. |
| Distruttore ~task_group | Elimina un oggetto task_group . È previsto chiamare il metodo wait o run_and_wait sull'oggetto prima dell'esecuzione del distruttore, a meno che il distruttore non venga eseguito come risultato della disfazione dello stack a causa di un'eccezione. |
Metodi pubblici
| Nome | Descrizione |
|---|---|
| cancel | Fa il massimo sforzo per annullare il sottogruppo di attività radicato in questo gruppo di lavoro. Se possibile, ogni attività pianificata nel gruppo di attività verrà annullata in modo transitivo. |
| sta_annullando | Informa l'utente chiamante se il gruppo di attività è attualmente nel corso di un annullamento. Ciò non indica necessariamente che il cancel metodo è stato chiamato sull'oggetto task_group (anche se tale certamente qualifica questo metodo per restituire true). È possibile che l'oggetto task_group sia in esecuzione inline e che un gruppo di attività più avanti nell'albero di lavoro sia stato annullato. Nei casi come questi in cui il runtime può determinare in anticipo che l'annullamento scorrerà attraverso questo oggetto task_group, anche true verrà restituito. |
| eseguire | Sovraccarico. Pianifica un'attività sull'oggetto task_group . Se un task_handle oggetto viene passato come parametro a run, il chiamante è responsabile della gestione della durata dell'oggetto task_handle . La versione del metodo che accetta un riferimento a un oggetto funzione come parametro comporta l'allocazione dell'heap all'interno del runtime che può essere eseguita meno bene rispetto all'uso della versione che accetta un riferimento a un task_handle oggetto . La versione che accetta il parametro _Placement comporta che per l'attività venga data priorità all'esecuzione nella posizione specificata da quel parametro. |
| run_and_wait | Sovraccarico. Pianifica un'attività da eseguire direttamente nel contesto chiamante con l'assistenza dell'oggetto task_group per il pieno supporto dell'annullamento. La funzione attende quindi che tutto il lavoro sull'oggetto task_group sia stato completato o annullato. Se un task_handle oggetto viene passato come parametro a run_and_wait, il chiamante è responsabile della gestione della durata dell'oggetto task_handle . |
| aspettare | Attende che tutto il lavoro sull'oggetto task_group sia stato completato o annullato. |
Osservazioni:
A differenza della classe fortemente ristretta structured_task_group, la classe task_group è un costrutto molto più generale. Non sono previste restrizioni descritte da structured_task_group.
task_group gli oggetti possono essere usati in modo sicuro tra thread e utilizzati in modi in formato libero. Lo svantaggio del task_group costrutto è che potrebbe non funzionare bene quanto il structured_task_group costrutto per le attività che eseguono ridotte quantità di lavoro.
Per altre informazioni, vedere Parallelismo delle attività.
Gerarchia di ereditarietà
task_group
Requisiti
Intestazione: ppl.h
Spazio dei nomi: Concurrency
annulla
Fa il massimo sforzo per annullare il sottogruppo di attività radicato in questo gruppo di lavoro. Se possibile, ogni attività pianificata nel gruppo di attività verrà annullata in modo transitivo.
void cancel();
Osservazioni:
Per altre informazioni, vedere Annullamento.
sta annullando
Informa l'utente chiamante se il gruppo di attività è attualmente nel corso di un annullamento. Ciò non indica necessariamente che il cancel metodo è stato chiamato sull'oggetto task_group (anche se tale certamente qualifica questo metodo per restituire true). È possibile che l'oggetto task_group sia in esecuzione inline e che un gruppo di attività più avanti nell'albero di lavoro sia stato annullato. Nei casi come questi in cui il runtime può determinare in anticipo che l'annullamento scorrerà attraverso questo oggetto task_group, anche true verrà restituito.
bool is_canceling();
Valore restituito
Indicazione del fatto che l'oggetto task_group si trova in fase di annullamento (o lo sarà presto con certezza).
Osservazioni:
Per altre informazioni, vedere Annullamento.
eseguire
Pianifica un'attività sull'oggetto task_group . Se un task_handle oggetto viene passato come parametro a run, il chiamante è responsabile della gestione della durata dell'oggetto task_handle . La versione del metodo che accetta un riferimento a un oggetto funzione come parametro comporta l'allocazione dell'heap all'interno del runtime che può essere eseguita meno bene rispetto all'uso della versione che accetta un riferimento a un task_handle oggetto . La versione che accetta il parametro _Placement comporta che per l'attività venga data priorità all'esecuzione nella posizione specificata da quel parametro.
template<
typename _Function
>
void run(
const _Function& _Func
);
template<
typename _Function
>
void run(
const _Function& _Func,
location& _Placement
);
template<
typename _Function
>
void run(
task_handle<_Function>& _Task_handle
);
template<
typename _Function
>
void run(
task_handle<_Function>& _Task_handle,
location& _Placement
);
Parametri
_Funzione
Tipo dell'oggetto funzione che verrà richiamato per eseguire il corpo dell'handle di attività.
_Func
Funzione che verrà chiamata per richiamare il corpo dell'attività. Può trattarsi di un'espressione lambda o di un altro oggetto che supporta una versione dell'operatore di chiamata di funzione con la firma void operator()().
_Collocamento
Riferimento alla posizione in cui deve essere eseguita l'attività rappresentata dal parametro _Func.
_Task_handle
Un riferimento all'attività in programmazione. Si noti che il chiamante ha la responsabilità per la durata di questo oggetto. Il runtime continuerà ad aspettarsi che rimanga attivo fino a quando non viene chiamato il metodo wait o il metodo run_and_wait su questo oggetto task_group.
Osservazioni:
Il runtime pianifica la funzione di lavoro fornita da eseguire successivamente, che può avvenire dopo il ritorno della funzione chiamante. Questo metodo usa un oggetto task_handle per contenere una copia della funzione di lavoro fornita. Pertanto, eventuali modifiche di stato che si verificano in un oggetto funzione passato a questo metodo non verranno visualizzate nella copia di tale oggetto funzione. Assicurarsi inoltre che la durata di tutti gli oggetti passati per puntatore o riferimento alla funzione di lavoro rimanga valida fino a quando la funzione di lavoro non viene restituita.
Se il task_group viene distrutto a causa dello smantellamento dello stack di un'eccezione, non è necessario garantire che sia stata effettuata una chiamata al metodo wait o al run_and_wait. In questo caso, il distruttore interromperà e attenderà correttamente il completamento dell'attività rappresentata dal parametro _Task_handle.
Il metodo genera un'eccezione invalid_multiple_scheduling se l'handle di attività dato dal parametro _Task_handle è già stato pianificato su un oggetto gruppo di attività attraverso il metodo run e non è stata eseguita alcuna chiamata al metodo wait o al metodo run_and_wait su tale gruppo di attività.
esegui_e_attendi
Pianifica un'attività da eseguire direttamente nel contesto chiamante con l'assistenza dell'oggetto task_group per il pieno supporto dell'annullamento. La funzione attende quindi che tutto il lavoro sull'oggetto task_group sia stato completato o annullato. Se un task_handle oggetto viene passato come parametro a run_and_wait, il chiamante è responsabile della gestione della durata dell'oggetto task_handle .
template<
class _Function
>
task_group_status run_and_wait(
task_handle<_Function>& _Task_handle
);
template<
class _Function
>
task_group_status run_and_wait(
const _Function& _Func
);
Parametri
_Funzione
Tipo dell'oggetto funzione che sarà richiamato per eseguire il corpo dell'attività.
_Task_handle
Handle per l'attività che verrà eseguita in linea nel contesto chiamante. Si noti che il chiamante ha la responsabilità per la durata di questo oggetto. Il runtime continuerà a prevedere che rimanga attivo fino al termine dell'esecuzione del metodo run_and_wait.
_Func
Funzione che verrà chiamata per richiamare il corpo del lavoro. Può trattarsi di un'espressione lambda o di un altro oggetto che supporta una versione dell'operatore di chiamata di funzione con la firma void operator()().
Valore restituito
Indica se l'attesa è stata soddisfatta o se il gruppo di attività è stato annullato, a causa di un'operazione di annullamento esplicita o di un'eccezione generata da una delle attività. Per altre informazioni, vedere task_group_status.
Osservazioni:
Si noti che una o più delle attività pianificate per questo task_group oggetto possono essere eseguite in linea nel contesto chiamante.
Se una o più delle attività pianificate per questo task_group oggetto generano un'eccezione, il runtime selezionerà una di tali eccezioni a sua discrezione, propagandola al di fuori della chiamata al run_and_wait metodo.
Al ritorno dal metodo run_and_wait su un oggetto task_group, il runtime reimposta l'oggetto a uno stato pulito in cui può essere riutilizzato. Ciò include il caso in cui l'oggetto task_group è stato annullato.
Nel percorso di esecuzione non eccezionale è necessario chiamare questo metodo o il metodo wait prima del distruttore di task_group.
gruppo di attività
Costruisce un oggetto task_group nuovo.
task_group();
task_group(
cancellation_token _CancellationToken
);
Parametri
_CancellationToken
Token di annullamento da associare a questo insieme di attività. Il gruppo di attività verrà annullato quando il token viene annullato.
Osservazioni:
Il costruttore che accetta un token di annullamento crea un oggetto task_group che verrà annullato quando l'origine associata al token viene annullata. Fornire un token di annullamento esplicito permette di isolare questo gruppo di attività dalla partecipazione a un annullamento implicito di un gruppo padre con un token diverso o senza token.
~task_group
Elimina un oggetto task_group . È previsto chiamare il metodo wait o run_and_wait sull'oggetto prima dell'esecuzione del distruttore, a meno che il distruttore non venga eseguito come risultato della disfazione dello stack a causa di un'eccezione.
~task_group();
Osservazioni:
Se il distruttore viene eseguito a seguito della normale esecuzione (ad esempio, non disallocazione dello stack a causa di un'eccezione) e né il metodo wait né il metodo run_and_wait è stato chiamato, il distruttore può generare un'eccezione missing_wait.
attendere
Attende che tutto il lavoro sull'oggetto task_group sia stato completato o annullato.
task_group_status wait();
Valore restituito
Indica se l'attesa è stata soddisfatta o se il gruppo di attività è stato annullato, a causa di un'operazione di annullamento esplicita o di un'eccezione generata da una delle attività. Per altre informazioni, vedere task_group_status.
Osservazioni:
Si noti che una o più delle attività pianificate per questo task_group oggetto possono essere eseguite in linea nel contesto chiamante.
Se una o più delle attività pianificate per questo task_group oggetto generano un'eccezione, il runtime selezionerà una di queste eccezioni e la propagherà al di fuori della chiamata al metodo wait.
La chiamata wait a un task_group oggetto lo reimposta in uno stato pulito in cui può essere riutilizzato. Ciò include il caso in cui l'oggetto task_group è stato annullato.
Nel percorso di esecuzione non eccezionale, è necessario chiamare questo metodo o il metodo run_and_wait prima che il distruttore di task_group venga eseguito.
Vedi anche
Spazio dei nomi concorrenza
Classe “structured_task_group”
Classe task_handle