Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2003-02-08 11:01:58


David Abrahams wrote:
> "Peter Dimov" <pdimov_at_[hidden]> writes:
>
>> David Abrahams wrote:
>>
>> [...]
>>
>>> Well, I don't really feel like arguing about this much longer.
>>
>> I'd love to contribute to this discussion but there's no firm ground
>> to stand on. What _are_ the concepts being discussed? I think I see
>>
>> AsyncCall<R>
>>
>> AsyncCall(function<R ()> f);
>>
>> void operator()();
>>
>> // effects: f();
>>
>> R result() const;
>>
>> // if operator()() hasn't been invoked, throw;
>> // if operator()() is still executing, block;
>> // otherwise, return the value returned by f().
>>
>> but I'm not sure.
>
> That's the general idea. Of course we can haggle over the syntactic
> details, but the main question is whether you can get a return value
> from invoking a thread function or whether you have to declare some
> "global" state and ask the thread function to modify it.

With the above AsyncCall:

async_call<int> f( bind(g, 1, 2) ); // can offer syntactic sugar here
thread t(f); // or thread(f); for extra cuteness
int r = f.result();

The alternative seems to be

async_call<int> f( bind(g, 1, 2) );
int r = f.result();

but now f is tied to boost::thread. A helper

int r = async(g, 1, 2);

seems possible with either approach.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk