<future>
, funkcje
async
future_category
make_error_code
make_error_condition
swap
|
async
Reprezentuje dostawcę asynchronicznego.
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);
Parametry
Zasad
launch
Wartość.
Uwagi
Definicje skrótów:
Skrót | opis |
---|---|
dfn |
Wynik wywołania metody decay_copy(forward<Fn>(fn)) . |
dargs |
Wyniki wywołań decay_copy(forward<ArgsTypes>(args...)) . |
Ty |
Typ result_of<Fn(ArgTypes...)>::type . |
Pierwsza funkcja szablonu zwraca wartość async(launch::any, fn, args...)
.
Druga funkcja zwraca future<Ty>
obiekt, którego skojarzony stan asynchroniczny zawiera wynik wraz z wartościami dfn
i dargs
i obiektem wątku, aby zarządzać oddzielnym wątkiem wykonywania.
Chyba że decay<Fn>::type
jest typem innym niż uruchamianie, druga funkcja nie uczestniczy w rozwiązywaniu przeciążeń.
Standard języka C++ stwierdza, że jeśli zasady są uruchamiane::async, funkcja tworzy nowy wątek. Jednak implementacja firmy Microsoft jest obecnie niezgodna. Uzyskuje swoje wątki z puli wątków systemu Windows, która w niektórych przypadkach może zapewnić wątki z recyklingu, a nie nowe. Oznacza to, że launch::async
zasady są implementowane jako launch::async|launch::deferred
. Kolejną implikacją implementacji opartej na puli ThreadPool jest to, że nie ma gwarancji, że zmienne wątku lokalne zostaną zniszczone po zakończeniu wątku. Jeśli wątek zostanie poddany recyklingu i dostarczony do nowego wywołania async
metody , stare zmienne nadal będą istnieć. Zalecamy, aby nie używać zmiennych lokalnych wątku w programie async
.
Jeśli zasada to launch::deferred
, funkcja oznacza skojarzony ze sobą stan asynchroniczny jako przechowując funkcję odroczoną i zwracaną. Pierwsze wywołanie dowolnej funkcji innej niż czas oczekiwania na gotowość skojarzonego stanu asynchronicznego wywołuje funkcję odroczoną przez ocenę INVOKE(dfn, dargs..., Ty)
.
We wszystkich przypadkach skojarzony stan future
asynchroniczny obiektu nie jest ustawiony na gotowy do momentu ukończenia oceny INVOKE(dfn, dargs..., Ty)
, zgłaszając wyjątek lub zwracając normalnie. Wynikiem skojarzonego stanu asynchronicznego jest wyjątek, jeśli został zgłoszony lub dowolna wartość zwrócona przez ocenę.
Uwaga
W przypadku elementu future
— lub ostatniego shared_future
— dołączonego do zadania uruchomionego z elementem std::async
, destruktor blokuje, jeśli zadanie nie zostało ukończone. Oznacza to, że blokuje, jeśli ten wątek nie został jeszcze wywołany .get()
lub .wait()
zadanie jest nadal uruchomione. future
Jeśli obiekt uzyskany z std::async
zostanie przeniesiony poza zakres lokalny, inny kod, który go używa, musi pamiętać, że jego destruktor może zablokować stan udostępniony, aby stał się gotowy.
Pseudo-funkcja INVOKE
jest zdefiniowana w pliku <functional>
.
Specyficzne dla firmy Microsoft
Gdy przekazana funkcja jest wykonywana asynchronicznie, jest wykonywana w puli wątków systemu Windows; zobacz Pule wątków. Liczba współbieżnych wątków jest ograniczona do domyślnej puli wątków (obecnie 500). Liczba wątków wykonywanych współbieżnie na sprzęcie jest obecnie ograniczona przez liczbę procesorów logicznych w grupie procesorów procesu, więc jest ona skutecznie ograniczona do 64; zobacz Grupy procesorów.
future_category
Zwraca odwołanie do obiektu error_category , który charakteryzuje błędy skojarzone z obiektami future
.
const error_category& future_category() noexcept;
make_error_code
Tworzy error_code wraz z obiektem error_category, który charakteryzuje przyszłe błędy.
inline error_code make_error_code(future_errc Errno) noexcept;
Parametry
Errno
Wartość future_errc identyfikującą zgłoszony błąd.
Wartość zwracana
error_code(static_cast<int>(Errno), future_category());
make_error_condition
Tworzy error_condition wraz z obiektem error_category, który charakteryzuje przyszłe błędy.
inline error_condition make_error_condition(future_errc Errno) noexcept;
Parametry
Errno
Wartość future_errc identyfikującą zgłoszony błąd.
Wartość zwracana
error_condition(static_cast<int>(Errno), future_category());
swap
Wymienia skojarzony stan asynchroniczny jednego promise
obiektu z innym.
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;
Parametry
Left
Lewy promise
obiekt.
Right
Właściwy promise
obiekt.
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla