Udostępnij przez


<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 asyncmetody , 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ż

<future>