
--- Pavel Vozenilek <pavel_vozenilek@hotmail.com> wrote:
A note aside: David Kohlhoff who
I've been called many things, but never David ;)
wrote asio library (http://asio.sourceforge.net/) also implemented futures on the top of his library.
I am still at trying to understand the whole thing so I can offer only pointer.
Just to clarify, asio does not include an implementation of futures. Instead, I have attached a couple of programs (to which Pavel was referring) that illustrate how asio might be used to implement them. Some points of note: - The demuxer class can easily be used as a thread pool to perform the work associated with a future (rather than spawning a thread just for a particular future). - A future need not just be used for waiting for the result of a single long-running function. It could also be used to wait for an asynchronous operation, or chain of asynchronous operations, to complete. My personal preference in futures is to have a reference counting handle->body implementation, where the future class itself would have little more than operations (or operators) for setting and waiting/getting. You would then have a separate function for creating a new future from a simple function or composed function object (rather than implicit conversion from a function object), e.g. template <typename Functor> future<typename result_of<Functor>::type> make_future(demuxer& d, Functor f); Other similar functions could be defined for creating futures that use a specially spawned thread to do the work, etc. This approach would also permit the use of futures on their own when needed (such as in the chain-of-async-operations use case). Cheers, Chris