> From: "Wolfgang Bangerth" <[EMAIL PROTECTED]> >> This does the same, indeed. Starting a thread this way is just a >> little more complex (and -- in my view -- less obvious to read) than >> writing >> thread t = spawn(foo)(a,b,c); >> >> But that's just personal opinion, and I'm arguably biased :-) > > I'm sure I'm never biased <wink>, and I tend to like your syntax better. > However, I recognize what Bill is concerned about. Let me suggest a > compromise: > > async_result<double> later = spawn(foo)(a, b, c);
Mustn't use the name spawn() here. It implies a thread/process/what ever has been spawned at this point, which is not the case. Or has it (he says later, having read on)? > ... > thread& t = later.thread(); The thread type will be Copyable and Assignable soon, so no need for the reference. Hmm... does this member indicate that spawn() above truly did create a thread that's stored in the async_result? Hmm... that would be an interesting alternative implementation. I'm not sure it's as "obvious" as the syntax I suggested, as evidenced by the questions I've raised here, but worth considering. Not sure I care for "spawn(foo)(a, b, c)" though. I personally still prefer explicit usage of Boost.Bind or some other binding/lambda library. But if you want to "hide" the binding, why not just "spawn(foo, a, b, c)"? And if we go this route, should be remove the boost::thread constructor that creates a thread in favor of using spawn() there as well? thread t = spawn(foo, a, b, c); > // do whatever with t > ... > double now = later.join(); // or later.get() > > You could also consider the merits of providing an implicit conversion > from async_result<T> to T. The merits, and the cons, yes. I'll be considering this carefully at some point. > This approach doesn't get the asynchronous call wound up with the > meaning of the "thread" concept. If I fully understand it, yes it does, but too a lesser extent. What I mean by this is that the async_result hides the created thread (though you do get access to it through the res.thread() syntax). I found this surprising enough to require careful thought about the FULL example you posted to understand this. -- William E. Kempf [EMAIL PROTECTED] _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost