Le 13/10/15 19:33, Vicente J. Botet Escriba a écrit :
Le 13/10/15 10:34, Vladimir Prus a écrit :
On 11-Oct-15 9:30 PM, Vicente J. Botet Escriba wrote:
Le 10/10/15 16:58, Vicente J. Botet Escriba a écrit :
Le 10/10/15 15:26, Vicente J. Botet Escriba a écrit :
Le 10/10/15 07:57, Vladimir Prus a écrit :
So, the function must be executed in different thread from all the continuations, and it would seem I'd need to something set executor on promise for that to work?
I will see how adding an Executor parameter to promise, packaged_task constructors and make_ready_future/make_exceptional_future could be implemented if this will solve your use case.
I've create https://svn.boost.org/trac/boost/ticket/11717 to track this feature request
This commit contains a fix for this issue as well as the addition of the VERY-EXPERIMENTAL promise::set_executor and packaged_task::set_executor. These should be replaced by constructors having an executor as parameter.
https://github.com/boostorg/thread/commit/b8db8fef8b28414d16c66761badc1c6fca...
Vicente,
thanks for the addition. I'll take a look at implementing Qt-friendly future on top of this, and report how it goes.
Thanks, Volodya
You are welcome.
Note that I've not implemented the constructors as it need to change the hierarchy of classes, but promise::set_executor and packaged_task::set_executor which is more expensive as I need to type-erase the executor.
Any feedback would be much appreciated.
After looking at the Concurrency TS, I'm not sure if it is not a good idea to store the executor so that f.then(cont) launch cont on the executor associated to f. In the Concurrent TS, ::then() can execute the continuation on any thread. " * When the object's shared state is ready, the continuation |/INVOKE/(/DECAY_COPY/(std::forward<F>(func)), std::move(*this))| is called on an unspecified thread of execution with the call to |/DECAY_COPY/()| being evaluated in the thread that called |then|. " What do you think? Best, Vicente