2017-05-25 56 views
4

在论文N3784中的std::future::then的接口包括接受执行程序的重载版本(在此更详细地在N3562中描述)作为参数。因此,如果您想要更多地控制执行回调的线程,则可以这样做。为什么执行器不再在并发TS和std :: future接口中?

但是,并发TS中的所有功能(这里是http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0159r0.html#futures.unique_future)的官方文档不包括.then()的重载,并且根本没有提及执行程序。它说

当对象的共享状态已准备就绪,延续INVOKE(DECAY_COPY(std::forward<F>(func))std::move(*this))被称为与调用DECAY_COPY()执行不详的线程中调用那么线程进行评估。

为什么界面不能精确控制闭包的执行方式?那么如何能够控制哪个线程运行回调呢?为什么从建议的版本改变?

注意我不知道,如果并发TS文件我挂的是最新的一个,但cppreference没有任何地方提到executor小号或者

编辑如果有人在一些C的参考或理由++标准文件提到不继续执行者的原因,那将是非常棒的!

+1

我非常怀疑这是Stack Overflow的主题。 – Xirema

+2

@Xirema你为什么这么说?如果标准委员会认为使用执行程序对于大多数编程用例来说是不好的设计,那么知道他们为什么这么想是很好的。 – Curious

+0

关于投票结束我的问题,它具体涉及一个用于标准C++编程的工具,所以我不认为这个问题应该因为这个原因而关闭。 – Curious

回答

2

为什么从建议的版本改变?

TSes是试验气球的功能接近标准化,但可能还没有最终形式。他们是标准委员会获得经验的机会,以便了解真实世界中的功能和不起作用。

由于至少有一个newer proposal for executors,似乎工作组对于执行者不满意,因为他们在TS中并且在标准化之前正在对其进行改进。

那么如何才能控制哪个线程运行回调?

现在看来,你不得不依赖于语言或库扩展或自己推出。如果提案成为标准的一部分,我还没有研究过这个提案,但它看起来像then_execute,它可以是一个自由函数或执行器对象的成员,它将是关键。

相关问题