Boost logo

Boost :

From: Hartmut Kaiser (hartmut.kaiser_at_[hidden])
Date: 2008-05-30 15:10:52

> I've updated my futures library to include wait_for_any() and
> wait_for_all().
> The provided overloads allow either waiting on up to five futures
> known at compile time:
> unique_future<int> f1;
> shared_future<std::string> f2;
> unique_future<double> f3;
> unsigned const ready_index=wait_for_any(future1,future2,future3);
> or on a container of futures:
> std::vector<jss::shared_future<int> > futures;
> std::vector<jss::shared_future<int> >::iterator const future=
> jss::wait_for_any(futures.begin(),futures.end());
> In the first instance, they can be of distinct types, but in the
> latter, all the futures in the container must be of the same type.
> The documentation is available at
> and the files and tests are available at

This reminds me of a discussion we had some time ago, namely overloading
operator&&() for futures allowing to achieve the same thing: waiting for all
of the futures:

    future<int> f1;
    future<double> f2;
    future<fusion::vector<int, double> > f3 (f1 && f2);

    fusion::vector<int, double> result = f3.get(); // waits for f1 and f2

Similarly, overloading operator|| would allow to wait for the first future
to finish only:

    future<int> f1;
    future<double> f2;
    future<variant<int, double> > f3 (f1 || f2);

    variant<int, double> result = f3.get(); // waits for first, f1 or f2

Regards Hartmut

Boost list run by bdawes at, gregod at, cpdaniel at, john at