Namensräume
Varianten
Aktionen

std::experimental::when_any

Von cppreference.com
 
 
 
 
Definiert im Header <experimental/future>
template< class Sequence >

struct when_any_result {
    std::size_t index;
    Sequence futures;

};
(Concurrency TS)
template< class InputIt >

auto when_any( InputIt first, InputIt last )

    -> future<when_any_result<std::vector<typename std::iterator_traits<InputIt>::value_type>>>;
(1) (Concurrency TS)
template< class... Futures >

auto when_any( Futures&&... futures )

    -> future<when_any_result<std::tuple<std::decay_t<Futures>...>>>;
(2) (Concurrency TS)

Erzeugt ein future-Objekt, das bereit wird, sobald mindestens eines der eingegebenen futures und shared_futures bereit ist. Das Verhalten ist undefiniert, wenn ein eingegebenes future oder shared_future ungültig ist.

Insbesondere sei Sequence ein std::vector<typename std::iterator_traits<InputIt>::value_type> für (1) und std::tuple<std::decay_t<Futures>...> für (2). Diese Funktion-Template erstellt einen gemeinsamen Zustand, der when_any_result<Sequence> enthält, und gibt ein Future zurück, das auf den gemeinsamen Zustand verweist. Jedes eingegebene future wird in das entsprechende Objekt im futures-Member von when_any_result<Sequence> im gemeinsamen Zustand verschoben, und jedes eingegebene shared_future wird in das entsprechende Objekt im futures-Member von when_any_result<Sequence> im gemeinsamen Zustand kopiert. Die Reihenfolge der Objekte in der Sequence entspricht der Reihenfolge der Argumente.

1) Diese Funktion nimmt nicht an der Überladungsauflösung teil, es sei denn, der Werttyp von InputIt (d. h. typename std::iterator_traits<InputIt>::value_type) ist ein std::experimental::future oder std::experimental::shared_future.
2) Diese Funktion nimmt nicht an der Überladungsauflösung teil, es sei denn, jedes Argument ist entweder ein (möglicherweise cv-qualifiziertes) std::experimental::shared_future oder ein cv-unqualifiziertes std::experimental::future. (Formal gilt für jeden Typ Fn in Futures, dass entweder std::remove_reference_t<Fn> ein std::experimental::future<Rn> ist oder std::decay_t<Fn> ein std::experimental::shared_future<Rn> ist.)

Nach diesem Aufruf sind alle eingegebenen futures ungültig; alle eingegebenen shared_futures bleiben gültig.

[bearbeiten] Rückgabewert

Ein future, das auf den durch den Aufruf erstellten gemeinsamen Zustand verweist. Das Future ist immer valid() und wird bereit, sobald mindestens eines der eingegebenen futures und shared_futures des Aufrufs bereit ist. Das index-Mitglied von when_any_result enthält die Position des bereiten future oder shared_future im futures-Mitglied.

1) Wenn der Bereich leer ist (d. h. first == last), ist das zurückgegebene future sofort bereit; das futures-Feld von when_any_result ist ein leerer Vektor und das index-Feld ist size_t(-1).
2) Wenn kein Argument angegeben wird, ist das zurückgegebene future sofort bereit; das futures-Feld von when_any_result ist ein leeres Tuple und das index-Feld ist size_t(-1).