<future>
funzioni
async
future_category
make_error_code
make_error_condition
swap
|
async
Rappresenta un provider asincrono.
template <class Fn, class... ArgTypes>
future<typename result_of<Fn(ArgTypes...)>::type>
async(Fn&& fn, ArgTypes&&... args);
template <class Fn, class... ArgTypes>
future<typename result_of<Fn(ArgTypes...)>::type>
async(launch policy, Fn&& fn, ArgTypes&&... args);
Parametri
politica
Valore launch
.
Osservazioni:
Definizioni delle abbreviazioni:
Abbreviazione | Descrizione |
---|---|
dfn |
Risultato della chiamata a decay_copy(forward<Fn>(fn)) . |
dargs |
Risultati delle chiamate decay_copy(forward<ArgsTypes>(args...)) . |
Ty |
Tipo result_of<Fn(ArgTypes...)>::type . |
La prima funzione modello restituisce async(launch::any, fn, args...)
.
La seconda funzione restituisce un future<Ty>
oggetto il cui stato asincrono associato contiene un risultato insieme ai valori di dfn
e dargs
e a un oggetto thread per gestire un thread di esecuzione separato.
A meno che decay<Fn>::type
non sia un tipo diverso dall'avvio, la seconda funzione non partecipa alla risoluzione dell'overload.
Lo standard C++ indica che se il criterio è launch::async
, la funzione si comporta come se richiamasse l'oggetto chiamabile in un nuovo thread. Ciò significa che, mentre in genere comporta la creazione di un nuovo thread, l'implementazione può usare altri meccanismi per ottenere un comportamento equivalente. Tuttavia, l'implementazione di Microsoft attualmente non è conforme rigorosamente a questo comportamento. Ottiene i thread da Windows ThreadPool, che può fornire un thread riciclato anziché un nuovo thread. Ciò significa che i launch::async
criteri vengono implementati in modo efficace come launch::async|launch::deferred
. Un'altra implicazione dell'implementazione basata su ThreadPool è che non esiste alcuna garanzia che le variabili locali del thread verranno distrutte al termine del thread. Se il thread viene riciclato e fornito a una nuova chiamata a async
, le variabili precedenti continueranno a esistere. È consigliabile evitare di usare variabili locali del thread con async
.
Se il criterio è launch::deferred
, la funzione contrassegna lo stato asincrono associato come contenente una funzione posticipata e restituisce. La prima chiamata a qualsiasi funzione non temporizzata che attende che lo stato asincrono associato sia ready in effetti chiama la funzione posticipata valutando INVOKE(dfn, dargs..., Ty)
.
In tutti i casi, lo stato asincrono associato dell'oggetto future
non è impostato su pronto fino al completamento della INVOKE(dfn, dargs..., Ty)
valutazione, generando un'eccezione o restituendo normalmente. Il risultato dello stato asincrono associato è un'eccezione se ne è stata generata una oppure qualsiasi valore restituito dalla valutazione.
Nota
Per un oggetto future
, o l'ultimo shared_future
, collegato a un'attività avviata con std::async
, il distruttore blocca se l'attività non è stata completata, ovvero blocca se il thread non ha ancora chiamato .get()
o .wait()
e l'attività è ancora in esecuzione. Se un oggetto future
ottenuto da std::async
viene spostato al di fuori dell'ambito locale, l'altro codice che lo usa deve tenere presente che il relativo distruttore può bloccarsi per consentire allo stato condiviso di diventare ready.
La pseudo-funzione INVOKE
è definita in <functional>
.
Sezione specifica Microsoft
Quando la funzione passata viene eseguita in modo asincrono, viene eseguita nel pool di thread di Windows; vedere Pool di thread. Il numero di thread simultanei è limitato all'impostazione predefinita del pool di thread (attualmente 500). Il numero di thread eseguiti simultaneamente sull'hardware è attualmente limitato dal numero di processori logici nel gruppo di processori del processo, quindi è effettivamente limitato a 64; vedere Gruppi di processori.
future_category
Restituisce un riferimento all'oggetto error_category che caratterizza gli errori associati a oggetti future
.
const error_category& future_category() noexcept;
make_error_code
Crea un oggetto error_code insieme all'oggetto error_category che caratterizza gli errori future.
inline error_code make_error_code(future_errc Errno) noexcept;
Parametri
Errno
Valore future_errc che identifica l'errore segnalato.
Valore restituito
error_code(static_cast<int>(Errno), future_category());
make_error_condition
Crea un oggetto error_condition insieme all'oggetto error_category che caratterizza gli errori future.
inline error_condition make_error_condition(future_errc Errno) noexcept;
Parametri
Errno
Valore future_errc che identifica l'errore segnalato.
Valore restituito
error_condition(static_cast<int>(Errno), future_category());
swap
Scambia lo stato asincrono associato di un oggetto promise
con quello di un altro oggetto.
template <class Ty>
void swap(promise<Ty>& Left, promise<Ty>& Right) noexcept;
template <class Ty, class... ArgTypes>
void swap(packaged_task<Ty(ArgTypes...)>& Left, packaged_task<Ty(ArgTypes...)>& Right) noexcept;
Parametri
Left
L'oggetto promise
a sinistra.
Right
L'oggetto promise
corretto.
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per